歡迎使用CSDN-markdown編輯器

第一章: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是否在前臺/後臺

    由上面兩個總結我們可以得知兩種特別的情況:

    1. 如果新的Activity主題是透明的,那麼可以知道舊Activity仍然會顯示,所以舊Activity的onStop是不會執行的。
    2. 只有舊Activity退到後臺,新Activity才能到前臺來,也就是舊的onPause執行完新的纔會執行onResume

    異常情況
    當系統配置發生改變或者內存不足時候,系統會異常殺死Activity,每當這時系統都會調用onSaveInstanceState 和 onRestoreInstanceState 這兩個函數

    1. onSaveInsatanceState 函數會保存當前Activity的數據,它會在onStop之前調用
    2. onRestoreInstanceState在onStart之後調用

    很多人就會問,系統咋知道我要保存啥數據啊,那麼多界面元素,它都知道嗎?感覺難以置信!這裏我們可以跟一下源碼一起來看看。如果不想看代碼,可以直接點擊跳轉查看結論

    Activity.java

    protected void onSaveInstanceState(Bundle outState) {
        outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());
        ...
    }

    從第二行可以看到,Activity委託了Window去保存,

    結論

Paste_Image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章