Android不同情况的生命周期

645 阅读2分钟

Android的activity生命周期比较常用,面试也会问到一些特殊情况的生命周期调用顺序,特此记录一些,会不定期更新

一、A → B

(有过被问到A跳到B出现了B页面卡顿可能是什么原因:A页面的onStop方法里可能执行了一些耗时操作)

A(onCreat) → A(onStart) → A(onResume) → 
(开始AB) A(onPause) → B(onCreat) → B(onStart) → B(onResume) → A(onStop)

999.png

二、A → B → B执行finish回到A

A(onCreat) → A(onStart) → A(onResume) → 
(开始AB) A(onPause) → B(onCreat) → B(onStart) → B(onResume) → A(onStop) (AB完成)→ 
B(onPause)(B的finish操作) 
→ A(onRestart) → A(onStart) → A(onResume) → B(onStop) → B(onDestory)

100.png

三、横竖屏切换

1. 切换横屏
网上搜索:
onSaveInstanceState → onPause → onStop → onDestory → 
onCreat → onStart → onRestoreInstanceState → onResume
自家小米手机测试 - 前三个顺序不一样,先以‘小米做处理’的理由保留意见
onPause → onStop → onSaveInstanceState → onDestory → 
onCreat → onStart → onRestoreInstanceState → onResume

121.png

2.切换竖屏
网上搜索(执行两遍):
onSaveInstanceState → onPause → onStop → onDestory → 
onCreat → onStart → onRestoreInstanceState → onResume → 
onSaveInstanceState → onPause → onStop → onDestory → 
onCreat → onStart → onRestoreInstanceState → onResume
自家小米手机测试 - 前三个顺序,且执行了一遍-_-,再以‘小米做处理’的理由保留意见
onPause → onStop → onSaveInstanceState → onDestory → 
onCreat → onStart → onRestoreInstanceState → onResume

666.png

3.配置android:configChanges="orientation|screenSize|keyboardHidden"

网上搜索的只加了orientation|keyboardHidden,小米手机测试不行,又加了screenSize才成功只执行了onConfigurationChanged

onConfigurationChanged

图为A → B,B页面切横屏又切回竖屏,每次切都执行了一次onConfigurationChanged方法

122.png

四、HOME键

小米手机测试,锁屏也是相同效果

activity运行时按HOME键
onPause → onStop → onSaveInstanceState
从桌面又点回到前台
onRestart → onStart → onResume

123.png

五、Dialog - 无影响

显示dialog时,并不会使activity进入后台,所以对activity的生命周期无影响

六、activity启动模式 - 四种

1.Standard

默认模式,每次启动Activity都会创建一个新的Activity实例。

2.SingleTop

通知消息打开的页面

如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法。

如果要启动的Activity不在栈顶,则会重新创建该Activity的实例。

自家小米手机测试
onPause → onNewIntent → onResume

111.png

3.SingleTask

主界面

如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所 有的Activity出栈,同时该Activity的onNewIntent()方法会被调用。

自家小米手机测试
onRestart → onStart → onNewIntent → onResume

222.png

4.SingleInstance

呼叫来电界面

要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例。