什么是Activity的生命周期
前言
我们平时开发中打交道最多的应该就是activity,关于它的生命周期对于整个app是非常重要的,合适的时机进行合适的操作才能使app更好的运行。
概念
1.Activity的生命周期有哪些
Activity各个生命周期和顺序见下图
onCreate:创建的意思,生命周期的第一个方法,常用于初始化,比如setContentView加载布局,初始化变量等。
onStart:Activity被展示到用户面前,但是此时无法产生焦点,无法与用户交互,一般可以进行初始化动画操作。
onResume:此时Activity在最前面,获得了焦点,用户可以进行操作交互。
onPause:Activity失去焦点,无法交互,但是仍然在前台。
onStop:Activity不可见,一般进行回收资源操作。
onDestory:Activity销毁。
2.各种情况变化Activity生命周期怎么变化
情况 | 生命周期变化 |
---|---|
弹窗dialog、Toast | 无变化 |
按home键返回主页 | 按下:onPause->onStop 点击app: onRestart->onStart->onResume |
息屏亮屏 | 息屏:onPause->onStop 亮屏:onReStart->onStart->onResume |
按返回键 | onPause->onStop->onDestory |
跳转至其他Activity | 跳转:onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A) 返回:onPause(B)->onReStart(A)->onStart(A)->onResume(A)->onStop(B)->onDestory(B) |
横竖屏切换 | onPause->onStop->onDestory->onCreate->onRestart->onResume |
3.onSaveInstanceState和onRestoreInstanceState怎么使用
onSaveInstanceState和onRestoreInstanceState是用来保存和恢复Activity数据的,因为Activity在被
方法 | 调用时机 |
---|---|
onSaveInstanceState | 当Activity入栈且非栈顶时(比如跳转其他Activity或者点击home键),onSaveInstanceState就会调用 当Activity出栈时(比如点击back或者finish)onSaveInstanceState不会被执行 |
onRestoreInstanceState | 只有Activity真正被系统非正常杀死恢复的时候会调用 |
4.Activity的启动模式有哪些
模式 | 概念 | 适用场景 |
---|---|---|
standard | 标准模式,每次启动Activity就会启动一个Activity实例 | 适用于大部分场景 |
singleInstance | 单例模式,该模式下创建Activity实例时,只会创建一个只有该Activity的栈。之后的任何程序调用该Activity,只会调用该栈中的实例。 | 呼叫来电页面,闹钟页 |
singleTop | 栈顶模式,启动该Activity时会判断栈顶是否为该Activity,如果是就直接调用,不再创建实例,回调onNewIntent方法,否则就会创建。 | 通知消息打开的页面,耗时操作返回页 |
singleTask | 栈内模式,启动该Activity如果在目标栈内存在,则不创建实例,回调onNewIntent。如果指定的栈不存在,则创建一个栈并将Activity实例压入。如果指定的栈存在,则直接压入该实例。 | 应用中的主页,多次点击之后返回 |
面试题
1.singleTop和singleTask有什么区别
singleTop:栈内可存在多个实例,默认进入启动它的任务栈
singleTask:栈内只有一个实例,由taskAffinity决定任务栈,会把栈中位于Activity之上的Activity都出栈
2.onNewIntent什么时候调用
当启动的Activity模式为singleTop,且位于栈顶,则会调用onNewIntent
当启动的Activity模式为singleTask,且位于目标栈中,则会调用onNewIntent
3.Activity什么时候调用onPause()后不调用onStop()
其他Activity主题是dialog或者透明时,Activity跳转的时候只会执行onPause不执行onStop