各種典型場景下Activity的生命週期

1. Activity正常啓動:

onCreate -> onStart -> onResume

2. Activity啓動另一個Activity:

(1)B完全遮擋住A

A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onSaveInstanceState-> A:onStop

此時如果點擊Back鍵,將依次執行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy,但是如果A長時間在後臺被殺死,則會調用其onCreate

(2)B沒有完全遮擋住A(比如Dialog形式或半透明)

A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onSaveInstanceState

此時如果點擊Back鍵,將依次執行B:onPause ->  A:onResume -> B:onStop -> B:onDestroy

此時如果點擊home鍵,將依次執行B:onPause ->  A:onStop -> B:onSaveInstanceState -> B:onStop

再將應用切到前臺 A:onRestart -> A:onStart -> B:onRestart -> B:onStart -> B:onResume

以上討論的基礎都是在B Activity的啓動模式爲standard模式下,如果B Activity的啓動模式爲singleTask

或singleInstance, 而且B Activity 已經存在於棧中,則啓動B Activity時,不會調用其onCreate,

而是調用onNewIntent。

3. 按back鍵返回到桌面(或者調用finish()方法銷燬)

onPause -> onStop -> onDestroy

4. 按home鍵返回到桌面

onPause -> onSaveInstanceState -> onStop

5.Activity 上有 Dialog 的時候按 home 鍵返回到桌面,之後再返回到Activity

彈出Dialog不影響Activity的生命週期(),點擊home鍵後onPause ->   onSaveInstanceState ->  onStop

再將Activity切換到前臺onRestart ->  onStart -> onResume

需要注意和dialog形式的Activity區分,彈出的AlertDialog對話框實際上是Activity的一個組件,我們對Activity並不是不可見而是被一個佈滿屏幕的組件覆蓋掉了其他組件,所以我們無法對其他內容進行操作,也就是AlertDialog實際上是一個佈滿全屏的組件,因此不會影響當前Activity的生命週期。但是啓動一個dialog形式的Activity情況就不同了,參見第2條。

6. 鎖屏再開屏

onPause -> onSaveInstanceState -> onStop    ->     onRestart ->  onStart -> onResume

7.旋轉屏幕

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

8.下拉狀態欄

不影響Activity生命週期

 

Activity生命週期圖:

 

        歡迎  掃一掃  下方二維碼

   關注我的公衆號 閱讀更多文章

       

部分圖文源自網絡,版權歸原作者所有,如有侵權請您告知

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