Activity基本用法

Activity是一个应用程序组件,提供用户与程序交互的界面。

1. Activity的状态

1.1 运行

一个活动位于返回栈的栈顶时,该活动就处于运行状态,Activity处于界面最顶端,获取焦点。
系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验。

1.2 暂停

活动不再处于栈顶,失去焦点,但仍然可见时,该活动就进入暂停状态。
即失去焦点状态。

1.3 停止

当活动不再处于栈顶,且完全不可见时,就进入停止状态(注意和暂停状态的区别),但保留所有状态和成员信息。

注:系统仍然会为这种活动保存相应的状态和成员变量。但这并不完全可靠,当其他地方需要内存时,处于停止状态的活动可能会被系统回收。

1.4 销毁

活动从返回栈中移除后就成了销毁状态。
系统最倾向于回收这种状态的活动,以保证手机内存充足。

2. Activity的生命周期

有七个环节,主要包括七个方法。

2.1 onCreate()

创建活动。
活动第一次被创建的时候调用,且一般会通 setContentView()方法来启动布局文件。

2.2 onStart()

运行活动。
活动由不可见变为可见的时候调用。

2.3 onResume()

活动准备好和用户进行交互时调用(即获取焦点)。
此时的活动一定位于返回栈的栈顶,且处于运行状态。

2.4 onPause()

系统准备去启动或恢复另一个活动时调用(失去焦点)。

注:我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据。但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。

2.5 onStop()

活动暂停。活动完全不可见时调用。

注:它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而 onStop()方法并不会执行。

2.6 onDestroy()

活动被销毁之前调用,之后活动变为销毁状态。

2.7 onRestart()

活动由停止状态变为运行状态之前调用,即重启活动。

Activity生命周期示意图:
Activity生命周期

注:以上七个方法中除了 onRestart()方法, 其他都是两两相对的。
从而又可将Activity分为以下三种生存期:

  1. 完整生存期
    onCreate()和onDestroy()之间,即完整生存期。
    一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestroy()方法中完成释放内存的操作。
  2. 可见生存期
    onStart()和onStop()之间,即可见生存期。
    在可见生存期内,活动对用户总是可见的(即便可能无法和用户进行交互)。
  3. 前台生存期
    onResume()和onPause()之间,就是前台生存期。
    在前台生存期内,活动总是处于运行状。此时的活动可以和用户进行相互,我们平时看到和接触最多的也这个状态下的活动。

3. Activity的启动模式

Activity有4种启动模式,可以在 AndroidManifest中通过给 activity 标签指定android:launchMode 属性来选择启动模式。

3.1 standard

默认启动模式。
无论在返回栈中存在与否,每次启动都会创建该活动的一个新的实例。

3.2 singleTop

在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。

注:若已存在,但不在栈顶,则创建新的活动。

3.3 singleTask

每次启动该活动时,先在返回栈中检查是否存在该活动的实例,若存在则直接使用该实例,并把在此活动之上的所有活动统统出栈;若不存在则创建一个新的活动实例。

3.4 singleInstance

指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动。
此模式略复杂,以后细谈。

所有的Activity都要在 AndroidManifest.xml 中进行注册才能生效。示例代码:

<activity 
    android:name=".FirstActivity"
    android:label="This is first activity"
    android:launchMode="singleTop" >            
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/> --若想让FirstActivity作为程序的主活动,就必须加入这两句
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

注:

  1. Android 中的活动是可以层叠的。我们每启动一个新的活动,就会覆盖在原活动之上,然后点击 Back 键会销毁最上面的活动,下面的一个活动就会重新显示出来。
  2. 返回栈:
    Android 是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈( Back Stack)。每当我们按下 Back 键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈, 这时前一个入栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。
  3. onSaveInstanceState()方法:可将临时数据进行保存,解决活动被回收时临时数据得不到保存的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值