Activity生命周期以及启动模式
此文章来自我的CSDN
今天要来谈一个android经典的话题,Activity生命周期以及启动模式,Activity我们应该不陌生,因为四大组件用的最多的就是它了,我们今天再好好的认识一下我们熟知的Activity。
Activity状态和生命周期
万事万物应该都有自己的生长规律,在程序中也是如此,我们应该首先来了解下Activity的生命周期。
说到生命周期,我们应该引用一张经典的图
aaa.png
嗯,没错就是大家经常见到的这幅图,通过此图可知,我们Activity分为四个状态。
Activity四种状态
-
running 表示Activity处于活动状态,用户可以点击屏幕,屏幕可以做出相应,它是Activity 栈顶的一个状态
-
paused 表示Activity失去焦点时,或者被一个透明的Activity放置栈顶,此时只是失去了与用户交互的能力,并不是销毁,这时候所有变量信息都还在。 但是有一种特殊情况,也就是内存资源非常紧张会被回收。
-
stopped 出现在一种情况就是当一个Activity完全覆盖在此Activity时,被覆盖的Activity处于stopped,它不再是可见的。
-
killed 表示Activity被系统回收掉了
Activity运转流程以及对应的生命周期
- Activity启动 onCreate-> onStart -> onResume
-
onCreate Activity启动时候,会回调此方法,我们可以在里面进行各种初始化操作。
-
onStart Activity正在启动,但是还没有在前台显示,用户还不能与之交互。
-
onResume 此方法调用时候,用户可以与Activity进行交互。
- 按下Home键回到主界面(Activity不可见)-> onPause -> onStop
- onPause 这个方法被回调时候表示整个Activity处于停止状态
- onStop 表示整个Activity已经停止,已经不可见。 如果内存紧张会被回收
- 当我们再次回到原Activity时 -> onRestart ->onStart -> onResume
- onRestart 表示Activity正在重新启动,此Activity从不可见状态变为可见状态。 (场景:返回桌面点击图标进入)
- onStart 与上面的一致
- onResume 与上面的一致
- 退出当前Activity时-> onPause -> onStop -> onDestroy
- onPause 与上面的一致
- onStop 与上面的一致
- onDestroy 表示当前Activity正在被销毁,可以在此方法中做一些回收工作
Android任务栈
T[{{~IGZ}81]Y7{)EH}3WHV.png在说启动模式之前我觉得应该插播一个任务栈的概念,这样感觉有利于理解Android启动模式
在Android中,任务栈其实还是一个比较重要的概念,内部不用我多说了是一个栈结构(后进先出),用这个栈来存储我们的Activity。
注意:任务栈不是唯一的,一个Activity也可以独享一个任务栈。
我们每次在打开一个新的Activity或者退出Activity时候,都会在这个栈中添加或者删除Activity,Android系统可以通过任务栈有序的管理我们的Activity。
启动模式
上部分说的是任务栈,因为任务栈关系着启动模式,所以我们开始说说启动模式
如何使用
在我们的清单文件中使用
<application>
...
<activity android:launchMode="启动模式">
...
</application>
四种启动模式
- standard 标准模式,如果不设置启动模式的话会自动使用此模式,使用此模式会每次创建一个Activity实例放入栈中,每次都会走新的生命周期方法。
- singleTop 栈顶复用模式,它不是每次创建Activity都放入栈中,如果Activity会在任务栈栈顶,它不会创建新的Activity,反之还是会创建Activity,同时回调onNewIntent方法。
- singleTask 栈内复用模式, 其实他是一个单例模式,与singleTop有些类似,只不过singleTask模式会复用栈中存在的Activity,但是在复用时候会弹出在此Activity之上的Activity,并把它们销毁。这时Activity也会调用onNewIntent方法。
- singleInstance 此模式的Activity在整个系统中只有一个实例并且独享一个任务栈,在android中不太常用。
Activity的Flags
说完启动模式,我们要说一些与启动模式相关的Flags
- FLAG_ACTIVITY_NEW_TASK 此标记位的作用是为Activity指定 singleTask启动模式,与xml中定义效果相同
- FLAG_ACTIVITY_SINGLE_TOP 此标记位的作用是为Activity指定 singleTop启动模式,与xml中定义效果相同
- FLAG_ACTIVITY_CLEAR_TOP 当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,这个标记位一般会和singleTask启动模式一起出现,在这种情况下,被启动的Activity实例如果已经存在,那么系统就会调用它的onNewIntent方法,如果启动模式采用默认方式启动,他们它与它之上的Activity都要出栈,系统会创建新的Activity放入栈顶。 但是我们可以直接通过singleTask启动模式默认实现此标记位的效果。
这篇文章到这里就结束了,感谢大家抽出宝贵的时间来看这篇文章,如有不足,还请指出