《Android群英传》学习笔记之Activity与Activity调用栈分析

一、Activity

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

《Android群英传》学习笔记之Activity与Activity调用栈分析_第1张图片

  • 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群英传)