文章目錄
Activity生命週期
典型狀態下的生命週期圖
- onCreate
生命週期的第一個方法,表示Activity正在被創建。在這個方法中,可以做一些初始化操作,但是不要做耗時操作,也可以對界面的主題樣式進行設置。當然,最重要的就是在該方法中指定佈局。
//設置樣式的方法必須位於setContentView之前
requestWindowFeature(Window.FEATURE_NO_TITLE);//不顯示標題欄
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
- onStart
表示Activity正在被啓動,這是Activity已經可見了,但是沒有出現在前臺,無法和用戶進行交互。 - onResume
表示Activity已經可見,且可以和用戶進行交互。雖然onStart和onResume都表示Activity已經可見,但是onStart的時候Activity還在後臺,onResume的時候Activity才顯示到前臺 - onPause
表示Activity正在停止,緊接着onStop會被調用。在該方法中可以做一些不耗時的操作,否則會影響新的Activity的顯示。 - onStop
表示Activity即將停止,可以做一些重量級的回收工作,同樣不能做耗時操作。 - onRestart
當位於後臺的Activity重新回到前臺時,會調用該方法,然後調用onStart->onResume - onDestroy
表示Activity即將被銷燬,我們可以做一些回收工作和最終資源釋放。
注意點:
1、onStart、onResume、onPause、onStop的區別?
onStart和onStop是一對,onResume和onPause是一對,onStart和onStop是正對界面的可見性而言的,onResume和onPause是針對界面是否在前臺而言的。
2、當前界面爲A,打開一個界面B,A、B的生命週期是怎樣的?關閉B之後,AB生命週期又是怎樣的?
A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop
關閉B
B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestory
異常情況下的生命週期
資源相關配置發生改變導致Activity被殺死並重新創建
例如:當手機進行橫豎屏切換時,由於系統配置發生了改變,在默認情況下,Activity會被銷燬並且重新創建。
生命週期:
onPause -> onSaveInstanceState -> onStop -> onDestory
注意:onSaveInstanceState一定會在onStop方法之前調用,不一定一定在onPause之後調用
onCreate -> onStart -> onRestoreInstanceState -> onResume
當然,我們也可以通過修改配置文件,阻止系統重新創建Activity。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"
//該配置用來阻止指定的情況下,不重新創建界面
android:configChanges="orientation|screenSize|screenLayout"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
當對應系統配置發生改變時,不會重新創建Activity,同時回掉onConfigurationChanged方法,因此可以在onConfigurationChanged方法中做配置改變後相關操作。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e(TAG,"onConfigurationChanged");
}
系統資源不足導致優先級低的Activity被殺死
這種情況不好模擬,但是其數據存儲和恢復情況和上述情況完全一致。
Activity的優先級從高到低可分爲如下三種:
- 前臺Activity,正在和用戶進行交互,優先級最高
- 可見但非前臺Activity——彈出對話框的Activity
- 後臺Activity——已經被暫停的Activity,優先級最低