天天看點

安卓儲存資料之onsaveInstanceStace(Bundle outState)的使用

當安卓裝置配置【一系列特征的組合:螢幕方向,螢幕像素密度,螢幕尺寸,鍵盤類型,底座模式,以及語言等】發生改變時,可能會有更合适的資源來比對新的裝置環境。

于是,Android會銷毀目前activity,為新配置尋找最佳資源,然後重新開機這個activity。

比如: 目前是豎屏,現在我mainActivity是一個ListView填充,當我滑動一定距離後,我不小心點到了螢幕旋轉,即豎屏變為了橫屏。然後問題來了,手機變為豎屏後,listview的item又回到最開始的地方。原因是因為,當螢幕方向改變,mainactivity先destroy,然後再onCreate,可以重寫onDestroy(), onCreate()然後打Log.d的tag驗證。

解決方法:

在onStop()方法回調之前,系統會自動調用onSaveInstanceState(Bundle outState),除非使用者按傳回鍵(記住,按傳回鍵就是告訴Android,activity用完了,随後該activity就完全從記憶體中被抹掉,自然也就沒有必要為重建儲存資料)。

我們重寫

onSaveInstanceState(Bundle outstate){
    super.onSaveInstanceState(outstate);
    outstate.putInt("key",currentPosition);
}
           

這樣,當螢幕旋轉時,會回調上面的函數,然後将目前ListView的position儲存在key中,之後我們可以在onCreate(Bundle savedInstance)中拿到

如下:

public void onCreate(Bundle savedInstance){
	super.onCreate();
	if(savedInstance != null){
		int position = savedInstance.getInt("key");
}
}
           

這樣就可以拿到之前的position位置,然後listview定位到取出來的position即可。