Activityの再構築
5507 ワード
Activityステータスの保存
09-15 11:09:56.002 5292-5292/com.example.li.restartactivity D/test: onsaveInstanceStateweds 09-15 11:09:56.002 5292-5292/com.example.li.restartactivity D/test: stop
私たちのactivityがStopを開始する前に、onSaveInstanceState()が呼び出されます.
Activityは,キー値ペアの集合で状態情報を保存することができる.この方法では、EditTextコンポーネントのテキストやListViewのスライド位置など、Activityビューのステータス情報がデフォルトで保存されます.
Activityに追加のステータス情報を保存するには、onSaveInstanceState()を実装し、Bundleオブジェクトにkey-value pairsを追加する必要があります.たとえば、次のようにします.
static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Caution:ビューステータスの情報を保存するには、onSaveInstanceState()メソッドの親インプリメンテーションを呼び出す必要があります.
---------------------------------------》
anticvityを復元する2つの方法
1,
onCreate()メソッドは、新しいActivityインスタンスが最初に作成され、再作成される前にDestoryされたインスタンスが呼び出されるため、Bundleオブジェクトを読み込む前にnullであるかどうかを検出する必要があります.nullの場合、システムはリカバリ前にDestoryのActivityではなく、新しいActivityインスタンスを作成します.
次の例では、onCreateメソッドでデータを復元する方法を示します.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
2,onRestoreInstanceState() onStart() . onRestoreInstanceState() , Bundle null。
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
Caution:上記と同様に、onRestoreInstanceState()メソッドの親インプリメンテーションを呼び出す必要があります.これにより、デフォルトの親インプリメンテーションがビューステータスの情報を保存できます.
/*@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
String text = savedInstanceState.getCharSequence(STORE).toString();
editText.setText(text);// editeText Activty view
// view
editeText=(EditeText)findViewById(R.layout.text);
editText.setText(Text);
super.onRestoreInstanceState(savedInstanceState);
}*/