1、方法調用時間java
onSaveInstanceState是用來保存UI狀態,在Activity殺死以前,它通常在onStop或者onPause以前觸發;數據庫
onRestoreInstanceState是在onResume以前觸發來恢復狀態;ide
Activity被殺死了,onCreate會被調用,且onRestoreInstanceState在 onResume以前恢復上次保存的信息;spa
Activity沒被殺死,onCreate不會被調用,但onRestoreInstanceState 仍然會被調用,在 onResume以前恢復上次保存的信息;線程
2、方法使用場景 rest
onSaveInstanceState() 只有在Acitivity被系統kill掉時纔會調用。因此一般onSaveInstanceState()只適合用於保存一些臨時性的狀態,而onPause()適合用於數據的持久化保存。ci
onSaveInstanceState()方法只適合保存瞬態數據, 好比UI控件的狀態, 成員變量的值等,而不該該用來保存持久化數據,持久化數據應該當用戶離開當前的activity時,在onPause()中保存(好比將數據保存到數據庫或文件中)。說到這裏,還要說一點的就是在onPause()中不適合用來保存比較費時的數據,因此這點要理解。get
因爲onSaveInstanceState()方法方法不必定會被調用, 所以不適合在該方法中保存持久化數據, 例如向數據庫中插入記錄等. 保存持久化數據的操做應該放在onPause()中。如果永久性值,則在onPause()中保存;若大量,則另開線程吧,別阻塞UI線程。 it
3、使用方法class
1.在onSaveInstanceState方法中保存bundle:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); saveState(outState); } @Override protected void onRestoreInstanceState(Bundle InState) { super.onRestoreInstanceState(InState); mMapView.onSaveInstanceState(InState); restoreState(InState); }
/** * 進入三維模塊後,該activity會被kill掉,此處保存被殺掉前的一些狀態數據 * * @param outState */ private void saveState(Bundle outState) { outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON, mJson); outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY, mGalleryJson); outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH, mFlashJson); outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO, mVideoList); outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS, mNewsList); outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST, mEstateHouseList); } private void restoreState(Bundle inState) { }
2.在oncreate或者onRestoreInstanceState方法中讀取保存的bundle:
if (savedInstanceState == null) { //正常狀況 loadTask(); } else { //進入三維圖被kill後返回,恢復頁面數據 mJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON); mGalleryJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY); mFlashJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH); mVideoList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO); mNewsList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS); mEstateHouseList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST); if(mJson != null && mGalleryJson != null && mFlashJson != null && mVideoList != null && mEstateHouseList != null) { loadComplete(); } else { loadTask(); } }