一、Activity
1、Activity形态:
- Active/Running
处于栈顶,可交互。 - Paused
被遮挡但未被完全覆盖,失去焦点,不可交互。 - Stopped
被完全覆盖,但保持了所有状态信息和成员变量。 - Killed
Activity被回收或从未被创建过。程序员不可控制Stop状态下何时销毁Activity。
2、生命周期:

- onDestroy():记得在这里清除开启的线程,因为引用会在Activity销毁的时候销毁,而线程不会。
- onPause():释放系统资源,如Camera、sensor、receivers等。
- 系统长时间处于Stop状态的时候,系统会根据内存占用情况可能会对Acivity进行回收。但会将Acitvity的状态通过onSaveInstanceState()方法存入Bundle对象中(可增加额外的键值对存入Bundle)。重建这些被销毁的Activity时,会将Bundle对象传入onRestoreInstanceState()方法或onCreate()方法中。如果用户调用了finish()方法结束Activity,则不会进行上述操作
二、Android任务栈及启动模式
- Android系统通过 栈(Task) 结构来保存整个App的Activity。
1、AndroidManifest启动模式
- (1)standard
标准模式。后进先出,Activity一个一个叠加。 - (2)singleTop
单一栈顶模式。每次创建新的Activity的时候,系统会自动检查栈顶是否存在相同的实例,如果存在就不会再创建了,但仍会调用栈顶Activity的onNewIntent()方法。- 通常用于接收到消息后显示的界面(eg:聊天,连续收到消息)。
- (3)singleTask
单一任务栈模式。每次创建新的Acitivy的时候,系统会自动检查整个任务栈是否存在相同的实例,如果存在就不会再创建了,并且会将栈中该Activity之上的所有Activity全部清除。- 通常在主活动设置此模式,用于退出整个应用。
- (4)singleInstance
建立一个只存在此任务的新的任务栈用于多程序共享。- 常用于需要与程序分离的界面
2、Intent Flag启动模式
- (1)Intent.FLAG_ACTIVITY_NEW_TASK
- 使用一个新的Task来启动一个Activity,启动的每个Activity都将在一个新的Task中。
- 通常使用在从Service中启动Activity,因为Service中没有Acivity栈。
- (2)FLAG_ACTIVITY_SINGLE_TOP
- 使用singletop模式启动一个activity,与指定android:launchMode="singleTop"相同。
- (3)FLAG_ACTIVITY_CLEAR_TOP
- 使用singleTask模式启动一个activity,与指定android:launchMode="singleTask"相同。
- (4)FLAG_ACTIVITY_NO_HISTORY
- 当为B设置此启动模式后,若A启动B,B启动C,B会在启动C后自动销毁,栈中只有AC。
三、清空任务栈
可在AndroidManifest文件中的标签下使用
- clearTaskOnLaunch:每次返回该Activity时,都将该Activity之上的所有Activity清除。
- finishOnTaskLaunch:当用户离开这个Activity所在的Task,再返回时,该Activity就会被finish掉。
- alwaysRetainTaskState:该Activity所处的Task不接受任何清理命令,一直保持当前Task状态。
本文详细解析了Android中Activity的四种状态与生命周期方法,包括onDestroy、onPause等,以及如何通过onSaveInstanceState和onRestoreInstanceState保存和恢复状态。同时,介绍了Android任务栈的工作原理和四种启动模式:standard、singleTop、singleTask、singleInstance,以及IntentFlag启动模式的使用。
1083

被折叠的 条评论
为什么被折叠?



