若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態?

 若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態 android

  當一個Activity被pause或者stop的時候,這個Activity的對象實際上仍是保存在內存中,所以這個Activity中的信息(成員和狀態信息)還能夠從新獲取到. 
    若是系統爲了整理內存而銷燬了整合各Activity對象時,系統無法簡單的原封不動地恢復先前的Activity對象及其狀態信息. 
    從android手冊上來看,Activity中提供了一個方法:onSavedInstanceState(Bundle obj).當系統銷燬一個Activity時,會將Activity的狀態信息已鍵值對形式存放在bundle對象中. 
    第一次啓動Activity時,這個bundle對象是空的,null.若是Activity被系統銷燬了,而後用戶要回退回去看的話,系統會調用這個Activity的onCreate方法,並把bundle對象傳遞過去. 
    這個函數有默認的行爲,所以就算你不覆蓋它,它在Activity中也有實現. 
    這回我總算明白了爲何onCreate方法的定義是"protected void onCreate (Bundle savedInstanceState)"這個樣子的了. 
    另外,剛纔查看了一下Activity的源碼,發現Activity還有個onRestoreInstanceState(Bundle outState)方法.這個方法的描述中也寫到在Activity回覆先前保存的狀態時會被調用.
函數

 

當你的程序中某一個Activity A在運行時,主動或被動地運行另外一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成之後又會來找A,這個時候就有兩種狀況:一是A被回收,二是A沒有被回收,被回收的A就要從新調用onCreate()方法,不一樣於直接啓動的是這回onCreate()裏是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。 spa

相關文章
相關標籤/搜索