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生命週期圖:
歡迎 掃一掃 下方二維碼
關注我的公衆號 閱讀更多文章
部分圖文源自網絡,版權歸原作者所有,如有侵權請您告知