天天看點

【Android 應用開發】Activity 狀态儲存 OnSaveInstanceState參數解析

作者 : 韓曙亮

一. 相關方法簡單介紹

activity 建立時回調 : 該方法會自己主動傳入一個 bundle 對象, 該 bundle 對象就是上次被系統銷毀時在 onsaveinstancestate 或者 onrestoreinstancestate 中儲存的資料;

-- 注意 : 僅僅有是系統自己主動回收的時候才會儲存 bundle 對象資料;

-- bundle 對象來源 : oncreate() 方法中的 bundle 對象參數, 是在 onsaveinstance() 或者 onrestoreinstancestate() 方法中儲存的 bundle 對象;

.

outstate 參數作用 : 

-- 資料儲存 : activity 聲明周期結束的時候, 須要儲存 activity 狀态的時候, 會将要儲存的資料使用鍵值對的形式 儲存在 bundle 對象中;

-- 恢複資料 : 在 activity 的 oncreate()方法 建立 activity 的時候會傳入一個 bundle 對象, 這個 bundle 對象就是這個 outstate 參數;

調用時機 : activity easy被銷毀的時候調用, 注意是easy被銷毀, 也可能沒有銷毀就調用了;

-- 按下home鍵 : activity 進入了背景, 此時會調用該方法;

-- 按下電源鍵 : 螢幕關閉, activity 進入背景;

-- 啟動其他 activity : activity 被壓入了任務棧的棧底;

-- 橫豎屏切換 : 會銷毀目前 activity 并又一次建立;

onsaveinstancestate方法調用注意事項 : 

-- 使用者主動銷毀不會調用 : 當使用者點選回退鍵 或者 調用了 finish() 方法, 不會調用該方法;

-- 調用時機不固定 : 該方法一定是在 onstop() 方法之前調用, 可是不确定是在 onpause() 方法之前 還是 之後調用;

-- 布局中元件狀态存儲 : 每一個元件都 實作了 onsaveinstance() 方法, 在調用函數的時候, 會自己主動儲存元件的狀态, 注意, 僅僅有有 id 的元件才會儲存;

-- 關于預設的 super.onsaveinstancestate(outstate) : 該預設的方法是實作 元件狀态儲存的;

方法回調時機 : 在 activity 被系統銷毀之後 恢複 activity 時被調用, 僅僅有銷毀了之後重建的時候才調用, 假設記憶體充足, 系統沒有銷毀這個 activity, 就不須要調用;

-- bundle 對象傳遞 : 該方法儲存的 bundle 對象在 activity 恢複的時候也會通過參數傳遞到 oncreate() 方法中;

-- 位于生命周期位置吧 : 該方法在 onresume() 方法之前儲存資訊; 

二 代碼示範樣例

activity 主要代碼 : 

執行結果 : 在執行的過程中 旋轉螢幕;

作者 : 韓曙亮

繼續閱讀