第一章:Activity 的生命週期和啓動模式
1.1 Activity的生命週期
- onCreate - 構建Activity
- onRestart - Activity在重啓,一般來說Activity恢復時在onStop後執行
- onStart - Activity開始啓動,這時Activity已經可見,但是仍然處於後臺狀態,所以儘管處於可見狀態,用戶也看不見,事件也無法響應。
- onResume - Activity已經啓動,並且處於前臺狀態.用戶可見,事件可響應。
- onPause - Activity正在執行停止 一般情況緊接着會有onStop。注意只有當前onPause函數執行,新Activity纔會執行onResume,所以切記不可做耗時處理。
- onStop - Activity即將停止 ,同樣不能太耗時。
onDestroy - Activity最後一個生命函數,可以做資源回收。
總結一下
- onStart 和 onStop 是一對的他們代表了Activity是否可見
- onResume 和 onPause 是一對他們表示了Activiry是否在前臺/後臺
由上面兩個總結我們可以得知兩種特別的情況:
- 如果新的Activity主題是透明的,那麼可以知道舊Activity仍然會顯示,所以舊Activity的onStop是不會執行的。
- 只有舊Activity退到後臺,新Activity才能到前臺來,也就是舊的onPause執行完新的纔會執行onResume
異常情況
當系統配置發生改變或者內存不足時候,系統會異常殺死Activity,每當這時系統都會調用onSaveInstanceState 和 onRestoreInstanceState 這兩個函數- onSaveInsatanceState 函數會保存當前Activity的數據,它會在onStop之前調用
- onRestoreInstanceState在onStart之後調用
很多人就會問,系統咋知道我要保存啥數據啊,那麼多界面元素,它都知道嗎?感覺難以置信!這裏我們可以跟一下源碼一起來看看。如果不想看代碼,可以直接點擊跳轉查看結論
Activity.java
protected void onSaveInstanceState(Bundle outState) { outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); ... }
從第二行可以看到,Activity委託了Window去保存,
結論