1. 程式人生 > >如果後臺的Activity由於某種原因被系統回收了,如何在被系統回收之前儲存當前狀態?

如果後臺的Activity由於某種原因被系統回收了,如何在被系統回收之前儲存當前狀態?

         當你的程式中某一個Activity A在執行時,主動或被動地執行另一個新的Activity B,這個時候A會執行onSaveInstanceState()來儲存Activity的當前狀態 。B完成以後又會來找A,

這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新呼叫onCreate()方法,不同於直接啟動的是這回onCreate()裡是帶上了引數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。

        當一個Activity被pause或者stop的時候,這個Activity的物件實際上還是儲存在記憶體中,因此這個Activity中的資訊(成員和狀態資訊)還可以重新獲取到.
    如果系統為了整理記憶體而銷燬了整個Activity物件時,系統沒法簡單的原封不動地恢復先前的Activity物件及其狀態資訊.
    從android手冊上來看,Activity中提供了一個方法:onSavedInstanceState(Bundle obj).當系統銷燬一個Activity時,會將Activity的狀態資訊已鍵值對形式存放在bundle物件中.
    第一次啟動Activity時,這個bundle物件是空的,null.如果Activity被系統銷燬了,然後使用者要回退回去看的話,系統會呼叫這個Activity的onCreate方法,並把bundle物件傳遞過去.
    這個函式有預設的行為,因此就算你不覆蓋它,它在Activity中也有實現.