activity的生命周期和啟動模式
1.常見生命周期說明
2.兩個常見問題
問題一答案:本質上就是onstart和onstop方法是是否可見進行調用,而onresume和onpause是看是否為前臺互動而調用。
問題二答案:先執行a的onpause然後到b的oncreate,onstart,onresume再到b的onstop。啟動一個活動可以簡單理解為啟動activity的請求會由Instrumentation來處理,然後它通過Binder想AMS發送請求,AMS內部維護著一個ActivityStack並負責棧內的Activity的狀態同步,AMS通過ActivityThread去同步Activity的狀態從而完成生命周期方法的調用。
3.異常情況下的生命周期分析
1)資源相關的系統配置發生改變導致Activity被殺死並重新創建
2)資源內存不足導致優先級的Activity被殺死
Activity按照優先級從高到低進行分,如下:
總結:
當activity在異常狀態下被殺死的時候,其會自動調用onSaveInstanceState()用於保存數據,並把這些數據放在Bundle中,然後再次啟動該活動的時候,該Bundle會發送到onCreate()和onRestoreInstanceState()中,所以我們可以在這兩個方法中進行判斷其是否在異常狀態下被殺死,從而取出數據,兩個方法都可以取出數據,但是有一點的不同,就是onRestoreInstanceState()方法一旦被調用,其Bundle一定會有值,但是onCreate()不一樣,官方推薦,是使用前者進行恢復數據。
註意:只有在activity異常被殺死的情況下才會調用onSaveInstanceState()方法。
代碼實例:
activity的生命周期和啟動模式