現場保護當一個活動進入到了停止的狀態,是有可能被系統回收的,我們都學過Activity的生命周期當活動處於onPause() ,onStop() ,onDestroy() 三種狀態時程式可能會被Android系統回收掉,這時如果之前未進行保護操作把數據保存的話就會造成用戶在程式當中的數據或者修改丟失...
現場保護
當一個活動進入到了停止的狀態,是有可能被系統回收的,我們都學過Activity的生命周期
當活動處於onPause() ,onStop() ,onDestroy() 三種狀態時程式可能會被Android系統回收掉,這時如果之前未進行保護操作把數據保存的話就會造成用戶在程式當中的數據或者修改丟失。也就是這裡要講的”現場保護”,我們希望當下次在運行程式時,上一次的數據還能恢復。
因此需要解決這種問題,Android提供了onSaveInstanceState(BundloutState)方法會在程式被回收前進行調用,它可以在程式被onStop()直前被調用,但不能保證是否在onPause()之前。保存的數據會存在一個bundle對象中,這個對象可以在下次啟動程式調用onCreate(Bundle)或onRestoreInstanceState(Bundle)時作為傳遞的參數,這也就是為什麼我們每一個activity重寫的onCreate方法都有這麼一段:
1 protected void onCreate(Bundle savedInstanceState) 2 { 3 // TODO Auto-generated method stub 4 super.onCreate(savedInstanceState); 5 }onCreate
onSaveInstanceState(Bundle) 裡面的這個Bundle對象和onCreate中的所指相同對象。
那到底什麼時候會調用這個方法,其實並不是在activity被destroy就一定調用。有時候也需要根據用戶設定,我的手機會在按返回鍵時kill掉,home鍵不會kill
onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
使用outState的put方法可以保存數據,每個保存方法需要傳入兩個參數,第一個是鍵,第二個是值
}
其實在安卓源碼里給出了很詳細的解釋,這裡我只是寫了自己對現場保護的理解。