Activity的生命周期全面分析(一)
《Android開發與探索》
目錄
- Activity的生命周期全面分析(一)
- 一、典型情況下生命周期分析
- 1.七種典型
- 2.問題思考
- 二、例外情況下的生命周期分析
- 1.資源相關的系統配置發生改變導致Activity被殺死并重新創建
- (1).保存狀態
- (2).恢復狀態
- 2.資源記憶體不足導致低優先級的Activity被殺死
- 3.不想讓Activity在螢屏旋轉的時候重新創建
一、典型情況下生命周期分析
1.七種典型
onCreate:表示活動正在被創建,常常在里面做一下初始化作業
onDestroy:表示活動即將被銷毀,可以在里面做一下回收作業
onStart:表示活動正在被啟動,即將開始,在后臺了
onStop:表示活動即將停止,可以做一些輕的回收作業
onResume:表示活動已經可見了,在前臺了
onPause:表示活動正在停止,正常情況下,后面緊跟onStop操作
onRestart:活動正在重寫啟動,一般下,當前活動從不可見重新變為可見時,就呼叫
onCreate和onDestroy配對,標識創建和銷毀,并且只可能有一次呼叫
onStart和onStop配對,表示設備的后臺操作
onResume和onPause配對,表示設備的前臺操作
2.問題思考
Q1:onStart和onResume、onPause和onStop從描述上來看起來差不多,對我們來說有什么實質的不同呢?
onStart和onStop是從可見的角度去回呼的
onResume和onPause是從是否位于前臺的角度去回呼的
Q2:假設當前Activity為A,如果這時用戶打開一個新Activity B,那么B的onResume和A的onPause那個先執行?
結論:舊的Activity先onPause,然后新的Activity在啟動
A------------onPause
B------------onCreate
B------------onStart
B------------onResume
A------------onStop
所以要求盡量在onStop里面去做邏輯
二、例外情況下的生命周期分析
1.資源相關的系統配置發生改變導致Activity被殺死并重新創建
例如:活動處于豎屏狀態,如果突然旋轉螢屏,由于系統配置發生了變化,在默認情況下,活動就會被銷毀并且重新創建,當然也可以阻止重新創建,我們按照默認的情況去分析,

例外情況下終止,Activity會去呼叫onSaveInstanceState來保存當前活動的狀態,然后進行重寫創建;重新創建的時候會呼叫onRestoreInstanceState和onCreate方法去恢復部分資料,
保存和恢復的流程:活動呼叫onSaveInstanceState去保存資料,然后Activity去委托window,window去委托它上面的頂級容器viewgroup/dectorview去保存,最后頂層容器再一一通知它的子元素去保存資料,
(1).保存狀態
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String t = savedInstanceState.getString("restore_data");
Log.d("MainActivity", "onRestore------" + t);
}
(2).恢復狀態
接受的位置可以選擇onCreate或者onRestoreInstanceState.
兩者的區別是onRestoreInstanceState一旦被呼叫,里面的bundle是有值的,不用去判空,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
String t = savedInstanceState.getString("restore_data");
Log.d("MainActivity", "onCreate------" + t);
}
}
而onCreate必須要進行額外判斷
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String t = savedInstanceState.getString("restore_data");
Log.d("MainActivity", "onRestore------" + t);
}
更詳細的可見轉向這個鏈接的文章:
https://www.jianshu.com/p/27181e2e32d2
2.資源記憶體不足導致低優先級的Activity被殺死
先描述一個Activity的優先級:
前臺活動(正在和用戶互動)—高>>>>可見非前臺活動(被一個對話框擋住的Activity)—中 >>>>>后臺活動----低
如果一個行程中沒有四大組件在執行,那么很快就會被殺死,所以我們要將后臺作業放在service中
3.不想讓Activity在螢屏旋轉的時候重新創建
android::configChanges="orientation"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/210040.html
標籤:java
