Androidノート:onSaveInstanceStateとonRestoreInstanceStateまとめ
一、メソッド呼び出し時間 onSaveInstancesStateはUI状態を保存するために使用され、Activityが殺す前に、onStopまたはonPauseの前にトリガーされるのが一般的である. onRestoreInstanceStateは、onResumeの前にトリガされて状態を回復する. Activityが殺され、onCreateが呼び出され、onRestoreInstancesStateはonResumeの前に前回保存した情報を復元します. Activityは殺されず、onCreateは呼び出されませんが、onRestoreInstanceStateは呼び出され、onResumeの前に前回保存した情報を復元します.
二、方法シーンの使用 onSaveInstanceState()は、Activityがシステムkillによって削除された場合にのみ呼び出されます.したがって、通常、onSaveInstanceState()は一時的な状態を保存するのに適しており、onPause()はデータの永続化保存に適しています. onSaveInstanceState()メソッドは、UIコントロールの状態、メンバー変数の値などの過渡データを保存するのに適しており、永続化データを保存するのではなく、ユーザーが現在のactivityを離れたときにonPause()に保存する(データベースやファイルに保存するなど)必要があります.ここまで言うと、onPause()では比較的時間のかかるデータを保存するのに適していないので、この点は理解しておきたい. onSaveInstanceState()メソッドが呼び出されるとは限らないため、データベースへのレコードの挿入など、永続化データの保存には不向きである.永続化データを保存する操作はonPause()に置くべきです.永続値の場合はonPause()に保存されます.大量であれば、UIスレッドをブロックしないで別のスレッドを開きましょう.
三、使用方法
1.onSaveInstanceStateメソッドにbundleを保存するには:
2.保存したbundleをoncreateまたはonRestoreInstanceStateメソッドで読み込みます.
二、方法シーンの使用
三、使用方法
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.保存したbundleをoncreateまたはonRestoreInstanceStateメソッドで読み込みます.
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();
}
}