《疯狂Android讲义》学习笔记 -- 深入理解Activity

本文详细探讨了Android中的Activity,包括其基本使用、启动与关闭、使用Bundle交换数据、在清单文件中声明及启动其他Activity并返回结果。重点解析了Activity的生命周期,如活动、暂停、停止和销毁状态,以及如何实现生命周期回调。此外,还讲解了Activity的四种加载模式:standard、singleTop、singleTask和singleInstance,并分析了它们各自的行为特点。
摘要由CSDN通过智能技术生成

Activity的说明

         Activity是一个 应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个Activity都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可以小于屏幕并浮动在其他窗口之上。
          一个应用通常由多个彼此松散联系的Activity组成 。一般会指定应用中的某个Activity为"主"Activity,即首次启动应用时呈现给用户的那个Activity。而且每个Activity均可启动另一个Activity,以便执行不同的操作。每次新的Activity启动时,前一个Activity便会停止,但系统会在堆栈(" 返回栈 ")中保留该Activity。当新Activity启动时,系统会将其推送到返回栈上,并取得用户焦点。返回栈遵循" 后进先出 "堆栈机制,因此,当用户完成当前Activity并按"返回"按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一Activity。
          当一个Activity因某个新Activity启动而停止时,系统会通过该Activity的生命周期回调方法通知其这一状态变化 Activity因状态变化-系统是创建Activity、停止Activity、恢复Activity还是销毁Activity-而收到的回调方法可能有若干种,每一种回调方法都会为您提供执行与该状态变化相应的特定操作的机会。例如,停止时,您的Activity应释放任何大型对象,例如网络或数据库连接。当Activity恢复时,您可以重新获取所需资源,并恢复执行中断的操作。这些状态转变都是Activity生命周期的一部分。

Activity的基本使用

创建Activity

          要创建Activity,您必须创建Activity的子类(或使用其现有子类)。您需要在子类中实现Activity在其生命周期的各种状态之间转变时(例如创建Activity、停止Activity、恢复Activity或销毁Activity)系统调用的回调方法。两个最重要的回调方法是:
onCreate()
        您必须实现此方法。系统会在创建您的Activity时调用此方法。您应该在实现内初始化Activity的必需组件。最重要的是,您必须在此方法内调用setContentView(),以定义Activity用户界面的布局。
onPause()
        系统将此方法作为用户离开Activity的第一个信号(但并不总是意味着Activity会被销毁)进行调用。您通常应该在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
          您还应使用几种其他生命周期回调方法,以便提供流畅的 Activity 间用户体验,以及处理导致您的 Activity 停止甚至被销毁的意外中断。 后文的管理Activity生命周期 部分对所有生命周期回调方法进行了阐述。

启动、关闭Activity

         正如前面介绍的,一个Android应用通常都会包含多个Activity,但只有一个Activity会作为程序的入口----当该Android应用运行时将会自动启动并执行该Activity。至于应用中的其他Activity,通常都由入口Activity启动,或由入口Activity启动的Activity启动。
         Activity启动其他Activity有如下两个方法。
  • startActivity(Intent intent):启动其他Activity。
  • startActivityForResult(Intent intent, int requestCode):以指定的请求码(requestCode)启动Activity,而且程序将会等到新启动Activity的结果(通过重写onActivityResult(...)方法来获取)。
         启动Activity时可指定一个requestCode参数,该参数代表了启动Activity的请求码。这个请求码的值由开发者根据业务自行设置,用于标识请求来源。
         上面两个方法都用到了Intent参数,Intent是Android应用里各个组件之间通信的重要方式,一个Activity通过Intent来表达自己“意图”----想要启动哪个组件,被启动的组件即可是Activity组件,也可是Service组件。
         Android为关闭Activity准备了如下两个方法:
  • finish():结束当前Activity。
  • finishActivity(int requestCode):结束以startActivityForResult(Intent intent, int requestCode)方法启动的Activity。
         下面的示例程序示范了如何启动Activity,并允许程序在两个Activity之间切换。
    
    
    
Intent intent = new Intent(StartActivity.this, SecondActivity.class);
startActivity(intent);
// 结束当前Activity
finish();

使用Bundle在Activity之间交换数据

        当一个Activity启动另一个Activity时,常常会有一些数据需要传过去。在Activity之间进行数据交换主要是通过Intent,把需要交换的数据放入Intent即可。
         Intent提供了多个重载的方法来“携带”额外的数据,如下所示:
  • putExtras(Bundle data):向Intent中放入需要“携带”的数据包。
  • Bundle getExtras():取出Intent所“携带”的数据包。
  • putExtra(String name, Xxx value):向Intent中按key-value对的形式存入数据。
  • getXxxExtra(String name):从Intent中按key取出指定类型的数据。
         从上面的介绍不难看出,Intent主要通过Bundle对象来携带数据,因此Intent提供了putExtras()和getExtras()两个方法。除此之外,Intent也提供了多个重载的 putExtra(String name, Xxx value)、 getXxxExtra(String name)方法,那么这些方法存,取的数据在哪里呢?其实Intent提供的 putExtra(String name, Xxx value)、 getXxxExtra(String name)方法,只是一个便捷的方法,这些方法是直接存、取Intent所携带的Bundle中的数据
          下面的示例程序示范了两个Activity之间如何通过Bundle交换数据。
    
    
    
FirstActivity发送数据:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle data = new Bundle();
data.putSerializable("person",p);
intent.putExtras(data);
startActiv
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值