Android的activity生命周期比较常用,面试也会问到一些特殊情况的生命周期调用顺序,特此记录一些,会不定期更新
→
一、A → B
(有过被问到A跳到B出现了B页面卡顿可能是什么原因:A页面的onStop方法里可能执行了一些耗时操作)
A(onCreat) → A(onStart) → A(onResume) →
(开始A→B) A(onPause) → B(onCreat) → B(onStart) → B(onResume) → A(onStop)
二、A → B → B执行finish回到A
A(onCreat) → A(onStart) → A(onResume) →
(开始A→B) A(onPause) → B(onCreat) → B(onStart) → B(onResume) → A(onStop) (A→B完成)→
B(onPause)(B的finish操作)
→ A(onRestart) → A(onStart) → A(onResume) → B(onStop) → B(onDestory)
三、横竖屏切换
1. 切换横屏
网上搜索:
onSaveInstanceState → onPause → onStop → onDestory →
onCreat → onStart → onRestoreInstanceState → onResume
自家小米手机测试 - 前三个顺序不一样,先以‘小米做处理’的理由保留意见
onPause → onStop → onSaveInstanceState → onDestory →
onCreat → onStart → onRestoreInstanceState → onResume
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
3.配置android:configChanges="orientation|screenSize|keyboardHidden"
网上搜索的只加了orientation|keyboardHidden,小米手机测试不行,又加了screenSize才成功只执行了onConfigurationChanged
onConfigurationChanged
图为A → B,B页面切横屏又切回竖屏,每次切都执行了一次onConfigurationChanged方法
四、HOME键
小米手机测试,锁屏也是相同效果
activity运行时按HOME键
onPause → onStop → onSaveInstanceState
从桌面又点回到前台
onRestart → onStart → onResume
五、Dialog - 无影响
显示dialog时,并不会使activity进入后台,所以对activity的生命周期无影响
六、activity启动模式 - 四种
1.Standard
默认模式,每次启动Activity都会创建一个新的Activity实例。
2.SingleTop
通知消息打开的页面
如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法。
如果要启动的Activity不在栈顶,则会重新创建该Activity的实例。
自家小米手机测试
onPause → onNewIntent → onResume
3.SingleTask
主界面
如果要启动的Activity已经存在于它想要归属的栈中,那么不会创建该Activity实例,将栈中位于该Activity上的所 有的Activity出栈,同时该Activity的onNewIntent()方法会被调用。
自家小米手机测试
onRestart → onStart → onNewIntent → onResume
4.SingleInstance
呼叫来电界面
要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例。