1. 程式人生 > >Activity點選Home鍵,Back()鍵所走的生命週期

Activity點選Home鍵,Back()鍵所走的生命週期

今天做了一個Demo測試,主要測試OnSaveInstanceState()方法在什麼情況下會走。

1.點選Home鍵

當在一個Activity中,點選Home鍵時,打印出的log,中Activity的生命週期依次走的是,如圖所示:
這裡寫圖片描述
結果發現在OnPause()和OnStop()方法中間走的OnSaveInstanceState();

當再次從手機中程式執行的棧中,點選這個Activity,恢復當前這個Activity時候,生命週期走的是,如圖所示:
這裡寫圖片描述
結果生命週期沒有變化。

當在開發者選項中,勾選上“不保留活動(使用者離開後即銷燬每個活動)”後,再次點選Home鍵,走的生命週期是,如圖所示:
這裡寫圖片描述


結果發現比之前多了一個OnDestroy()。
當再次從活動棧的列表中點選剛才的這個Actiivty時候,走的宣告週期是,如圖所示:
這裡寫圖片描述
結果發現,如果選擇上“不保留活動”的話,每一個Activity都會銷燬,然後再次啟動的時候都會重新走OnCreate()方法。

2.點選back鍵

1)沒有勾選“不保留活動”
點選右下角的back鍵,走的生命週期是,如圖所示:
這裡寫圖片描述
2)勾選上“不保留活動”
點選右下角的back鍵,走的生命週期是,如圖所示:
這裡寫圖片描述

結果生命週期沒有變化,唯一不同的是,點選了back鍵,不會再走OnSaveInstanceState(),對於這種主動要求退出的行為,app不會走OnSaveInstanceState()這個方法。

由此得出的結論是:
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()並不是生命週期方法,它們不同於 onCreate()、onPause()等生命週期方法,它們並不一定會被觸發。當應用遇到意外情況(如:記憶體不足、使用者直接按Home鍵)由系統銷燬一個Activity時,onSaveInstanceState() 會被呼叫。但是當用戶主動去銷燬一個Activity時,例如在應用中按返回鍵,onSaveInstanceState()就不會被呼叫。因為在這種情況下,使用者的行為決定了不需要儲存Activity的狀態。通常onSaveInstanceState()只適合用於儲存一些臨時性的狀態,而onPause()適合用於資料的持久化儲存。