1. 生命周期流程 & 方法详解
1.1 具体请看下图
1.2 注意点
onCreate()
&onDestory()
onStart()
&onStop()
onResume()
&onPause()
b. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别
onStart()
&onStop()
:从Activity
是否完全可见的角度 进行回调onResume()
&onPause()
: 从Activity
是否位于前台(UI最顶层)的角度进行回调;- 除了上述的区别,在实际使用中没有任何区别
c. 当前Activity为A,此时用户打开ActivityB后,那么A的onPause()和B的onResume()哪个方法先执行?
答:先 A的onPause()
,再B的onResume()
Activity
的启动过程:由ActivityManagerService
(AMS)对栈内的Activity
状态进行同步管理 & 规定:新Activity
启动前,栈顶的Activity必须先onPause()
,才能启动新的Activity
(执行onResume()
)
注:为了让新的
Activity
尽快切换到前台,在onPause()
尽量不要做耗时 / 重量级操作
2. 常见场景的生命周期调用方式
3. 与Fragment生命周期对比
Fragment
、Activity
的生命周期非常相似- 具体对比如下图:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
PS:
当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
Activity运行时按下HOME键(跟被完全覆盖是一样的):onSaveInstanceState --> onPause --> onStop onRestart -->onStart--->onResume
Activity未被完全覆盖只是失去焦点:onPause--->onResume