参考:
activity 生命周期
主要有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()等7个方法。
- 启动一个A Activity,
分别执行onCreate()、onStart()、onResume()方法。 - 从A Activity打开B Activity
分别执行A onPause()、B onCreate()、B onStart()、B onResume()、A onStop()方法。 - 关闭B Activity
分别执行B onPause()、A onRestart()、A onStart()、A onResume()、B onStop()、B onDestroy()方法。 - 横竖屏切换A Activity
- 清单文件中不设置android:configChanges属性时,先销毁onPause()、onStop()、onDestroy()再重新创建onCreate()、onStart()、onResume()方法,
- 设置orientation|screenSize(一定要同时出现)属性值时,不走生命周期方法,只会执行onConfigurationChanged()方法。
- Activity之间的切换
可以看出onPause()、onStop()这两个方法比较特殊,切换的时候onPause()方法不要加入太多耗时操作否则会影响体验。
1.正常情况 下的生命周期
2.Activity跳转 下的生命周期
Activity之间跳转时的生命周期 :
参考: Android面试题集:以前烂大街的四大组件-Activity,面试重提这些知识点你还记得吗?
A Activity 打开 B Activity 时都有哪些生命周期回调?
A.onPause -> B.onCrete -> B.onStart -> B.onResume -> A.onStop
这样回答只是及格,因为仅在 B Activity 的 launchMode 为 standard 或者 B Activity 没有可复用的实例时是这样的。
- 当 B Activity 的 launchMode 为 singleTop 且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化:
B.onPause -> B.onNewIntent -> B.onResume
- 当 B Activity 的 launchMode 为 singleInstance ,singleTask 且对应的 B Activity 有可复用的实例时,生命周期回调是这样的:
A.onPause -> B.onNewIntent -> B.onRestart -> B.onStart -> B.onResume -> A.onStop -> ( 如果 A 被移出栈的话还有一个 A.onDestory)
3.横竖屏切换 下的生命周期
防止横竖屏切换Activity重建,在清单文件AndroidMainfest的Activity中配置
android:configChanges="orientation|screenSize"