Android之Activity生命週期總結(二)
Activity除了使用者正常的操作所導致的生命週期方法的呼叫,但是還有一些極端的情況會導致Activity 生命週期 無法按照正常的情況去呼叫。下面具體的分析異常狀態下的情況。
1.資源相關的系統配置發生了改變導致Activity被強行殺死重建
這種情況最常見的是橫豎屏切換的時候,系統配置發生了變化,在預設情況下Activity就會被銷燬並且重新建立。除非我們自己阻止系統重新建立我們的Activity。
系統配置發生改變後,Activity會被銷燬,其中Activity退出時候呼叫的onPause、onStop、onDestroy 均會被呼叫。同時系統會呼叫onSaveInstanceState 來儲存當前Activity的狀態。這個方法會在onStop之前呼叫,和onPause沒有時序關係;當Activity被重新建立後,系統會呼叫onRestoreInstanceState方法,把Activity銷燬時 onSaveInstanceState 方法所儲存的Bundle物件作為引數同時傳遞給onRestoreInstanceState和onCreate方法,我們可以通過onRestoreInstanceState和onCreate方法來判斷Activity是否被重建了,如果被重建了那麼我們可以取出之前儲存的資料並恢復,onRestoreInstanceState在onStart方法之後呼叫。
2.資源記憶體不足導致低優先順序的Activity被殺死
這種情況資料儲存和恢復的過程跟上述情況一致,這裡說明下Activity的優先順序情況,Activity優先順序按照從高到低,可以分為以下三種:
1.前臺Activity:正在和使用者互動的Activity ,這種Activity優先順序最高;
2.可見但是不是前臺Activity:例如Activity中彈出一個Dialog,此時Activity雖然可見,但是無法和使用者進行互動;
3.後臺不可見Activity:已經被暫停的Activity優先順序最低。
系統記憶體不足時,系統就會按照優先順序的高低來殺死目標Activity所在的程序,後續可以通過onSaveInstanceState和onRestoreInstanceState來恢復資料。