Activity的四种状态和启动模式
Activity
- Activity的四种状态
- 1. Active/Running
- 2. Paused
- 3. Stopped
- 4. Killed
- 状态转换
- Activity启动模式
- standard标准模式
- singleTop(单顶)
- singleTask(单一任务)
- singleInstance单例模式
- 如何使用
Activity的四种状态
1. Active/Running
当一个Activity被创建后,完全显示在屏幕的最前端,且可以执行交互。该Activity位于Activity任务栈的栈顶。依次经过生命周期的回调onCreate()
->onStart()
->onResume()
,执行完onResume()
回调后,该Activity处于Running状态,即运行状态。
onCreate():在系统首次创建Activity时触发。这个回调方法必须被实现,而其它回调方法可以不强制要求实现,可以根据自己的需要实现。在这个方法里一般进行声明界面(setContentView(View)
),绑定视图findViewById(int)
,初始化成员变量。若Bundle参数不为null通过Bundle参数恢复数据。执行完onCreate()
后,该Activity处于"以开始状态",接下来依次执行onStart()
,onResume()
回调方法。
2. Paused
当前Activity失去焦点时,一个非全屏的Activity或者是半透明的Activity放置到栈顶时,虽然仍然部分可见,但已经不能再和用户进行交互。他仍然与窗口管理器保持联系,保持所有的状态和成员信息。
3. Stopped
当被另一个Activity完全覆盖,不可见时进入Stopped状态,仍然保持着状态和成员信息。无法与用户进行交互
4. Killed
如果一个Activity处于Paused或Stopped状态,系统可以将它从内存中删除,有两种删除方法,一种是要求它自己结束,一种是直接停止该Activity的线程。被销毁的Activity再次显示给用户时需要重新加载。
状态转换
Activity启动模式
Activity启动模式一共有四种:
- standard
- singleTop
- singleTask
- singleInstance
standard标准模式
- 创建没有限制,每次使用intent都是一个新的Activity
- Activity被创建在启动其的Activity的任务栈顶端
- Android Lollipop之后,被启动的Activity如果不是同一个应用,会新建一个任务栈
singleTop(单顶)
- 当顶部已经有相同的Activity时,不会再创建新的实例,而是回调任务栈中已经存在的该Activity的onNewIntent( )方法。
- 当前Activity位于栈顶,如果想要再创建一个相同的Activity,则不会成功,即保持栈顶该Activity的实例只有一个。
- 不是栈顶时和standard一样
singleTask(单一任务)
- Activity在Android系统中只允许存在一个实例。
- 当想要创建的Activity已经有了实例的时候,会将之前的Activity在其任务栈上位于他之上的所有Activity销毁,以让目标Activity处于栈顶。
singleInstance单例模式
- 这种启动模式和singleTask几乎一样,它也只允许系统中存在一个目标Activity
- 但是一个Activity承包了整个任务栈
如何使用
- 在AndroidMenifest.xml文件中设置
- 在<activity>
标签中设置android:launchMode="****"属性即可 - 通过为Intent添加标识来设置
- intent.addFlags();
-
FLAG_ACTIVITY_NEW_TASK 与"singleTask"启动模式的作用一样。
-
FLAG_ACTIVITY_SINGLE_TOP
与"singleTop"启动模式的作用一样。 -
FLAG_ACTIVITY_CLEAR_TOP