前言:在讀任大神的《Android開發藝術探索》這本書,摘錄一些關鍵資訊點,同時有些地方根據自己對內容的理解寫成了自己的話以期能加深印象。讀技術書不像讀文學、歷史等書可以一氣呵成。因為有的地方需要停下來敲一下程式碼驗證一下,所以讀完後面的前面的都忘記了。於是想到了把內容一個字一個字敲下來,因為我相信寫下來和看一遍效果絕對不同。在寫的過程中大腦有思考的時間,所以有了此文,後續還要把這本書系統讀完慢慢一篇篇更新。如果有大佬發現文中有錯誤還請善意的指出,在此先感謝了。
一、Activity的生命週期全面解析
- 典型(正常)情況下的生命週期,使用者參與的情況下,Activity所經過的生命週期的改變;
- 異常情況下的生命週期,指Activity被系統回收或者由於當前裝置的Configuration改變導致Activity被銷燬重建。
二、典型情況下的7個生命週期分析
- onCreate:表示Activity正在被建立,這是生命週期的第一個方法。在這個方法中可以做一些初始化工作,比如findViewById();
- onRestart:表示Activity正在重新啟動,當Activity從不可見重新變為可見狀態時就會被呼叫。比如使用者按了Home鍵導致程式被掛起或者啟動了另一個新的Activity,也就是Activity執行了onPause->onStop之後使用者返回了此Activity就會出現這種情況;
- onStart:表示Activity正在被重啟,這時Activity已經可見了只是還沒出現在前臺無法和使用者互動;
- onResume:已經可見(可互動);
- onPause:表示Activity正在停止,正常情況下onStop接著會被呼叫,理論上快速返回onResume會被呼叫重新回到onResume狀態,可以做一些非耗時操作,不然會影響新Activity的顯示,因為執行完onPause才會執行新Activity的onResume方法;
- onStop:表示Activity即將停止,可以做一些稍微重量級的回收工作,也不能太耗時;
- onDestroy:表示Activity即將被銷燬,這是最後一個生命週期方法。可以在此做一些回收和資源的釋放。
三、對生命週期的補充
- 針對一個特定的Activity第一次啟動,回撥如下:onCreate--->onStart--->onResume;
- 當使用者點選back時,回撥如下:onPause--->onStop--->onDestroy;
- 當使用者返回到此Activity時,回撥如下:onRestart--->onStart--->onResume,如果上一個頁面是透明theme/Dialog,忽略onRestart和onStart直接走onResume;
- 當使用者開啟新的Activity或者切換到桌面時,回撥如下:onPause--->onStop;特殊情況參見下面問題2答案;
- 當Activity被系統回收後再次開啟,生命週期回撥和(1)一樣,但是會儲存Activity的資料所以並非流程完全一樣;
- onCreate與onDestroy對應,代表了Activity的建立和銷燬;onStart和onStop對應,隨著使用者的操作或者裝置螢幕點亮和熄滅可能被呼叫多次,onResume和onPause對應,隨著使用者操作或者裝置螢幕點亮和熄滅可能被呼叫多次。
四、問題
問題1:onStart和onResume,onPause和onStop從描述上看差不多,對我們來說有什麼實質的不同? 答案:onStart和onStop是從是否可見這個角度來回撥的,onResume和onPause是從是否位於前臺是否可互動回撥的,其它在使用中沒有明顯區別。
問題2:假設當前Activity為A,如果使用者開啟一個新的ActivityB,那麼B的onResume和A的onPause誰先執行? 答案:onPause(A)--->onCreate(B)--->onStart(B)--->onResume(B)--->onStop(A,當B設定android:theme="@android:style/[Theme.Translucent,Theme.DeviceDefault.Dialog]"不走此回撥方法)。