如上图,activity从创建到销毁的声明周期方法:
- onCreate :创建Activity,初始化activity
- onStart :启动Activity,activity已经可见
- onResume:activity获得焦点
- onPause:activity失去焦点。新的activity会在此方法后启动
- onStop:activity停止运行
- onDestroy:销毁activity
- onRestart:重新启动
Activity A 跳转到Activity B 经历生命周期方法:
A:onPause
➜ B: onCreate、onStart、onResume
➜ A:onStop
下面是A跳转B的生命周期日志:
: =====A onPause
: =====B onCreate
: =====B onStart
: =====B onResume
: =====A onStop
B返回A:
: =====B onPause
: =====A onRestart
: =====A onStart
: =====A onResume
: =====B onStop
: =====B onDestroy
熄屏、屏幕唤起时生命周期:
熄屏:onPause、onStop
: =====A onPause
: =====A onStop
屏幕唤起:onRestart、onStart、onResume
: =====A onRestart
: =====A onStart
: =====A onResume
按home健返回桌面在返回当前Activity和上面生命周期一致:
: =====A onPause
: =====A onStop
: =====A onRestart
: =====A onStart
: =====A onResume
横竖屏切换时生命周期
activity先销毁在创建:
onPause ➜ onStop ➜ onDestroy ➜ onCreate ➜ onStart ➜ onResume
: =====A onPause
: =====A onSaveInstanceState
: =====A onStop
: =====A onDestroy
: =====A onCreate
: =====A onStart
: =====A onRestoreInstanceState
: =====A onResume
横竖屏切换时,可以在onSaveInstanceState
和onRestoreInstanceState
作数据的恢复与保存
设置configChanges
属性时:android:configChanges="orientation"
,此时activity不会被销毁和重建。
此时activity会调用onConfigurationChanged
方法
: onConfigurationChanged
A的启动模式为SingleTask
:栈内复用模式时的生命周期
B为默认启动模式。
A跳转B,B返回A的生命周期和上面一样
区别在A跳转到B后,B在跳转到A的生命周期如下。是跳转不是返回
: ===== B onPause
: ===== A onNewIntent
: ===== A onRestart
: ===== A onStart
: ===== A onResume
: ===== B onStop
: ===== B onDestroy
可以看到,A的onNewIntent()方法被调用。同时B的onDestroy()方法被调用。B页面被销毁。
因为SingleTask为栈内服用模式,只要有Activity的实例位于栈中,那么再次启动该activity则不会重新创建新的实例,而是直接销毁位于该Activity栈上面的其他实例,使该activity位于栈顶。
A的启动模式为SingleTop
:栈顶复用模式时的生命周期。
区别在于,如果A已经位于栈顶时,再跳转A时,A不会重新创建,会复用。A跳转A的生命周期如下:
: ===== A onPause
: ===== A onNewIntent
: ===== A onResume