1.メモリ不足
2.長期間利用なし
3.画面の向き変更
この後、Activityは再起動される時があります(3番はすぐに再起動されます)。
通常は再開時にオブジェクトのフィールド値など、全てのデータは初期化されてしまいますが、何事もなかったかのようにActivityを再開する目的で一時的にデータを退避させておく仕組みがBundleです。
public class MainActivity extends Activity {
int mInteger;
ArrayList<Integer> mArray;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<Integer> mArray = (ArrayList<Integer>) getLastNonConfigurationInstance();
if ( mArray == null ) {
mArray = new ArrayList<Integer>();
mArray.add(mInteger);
}
}
// onCreateより後に呼ばれる。初期起動時は呼ばれない
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Bundleよりデータを復元する
// int getInt("キー名", 存在しない場合のデフォルト値);
mInteger = saveInstanceState.getInt("integer", 0);
mArray.add(mInteger);
}
// Activity終了時に呼ばれる
@Override
public Object onRetainNonConfigurationInstance() {
// 保存オブジェクトを返す
return mArray;
}
// Activity終了時に呼ばれる
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Activity再開時に渡すデータをBundle
outState.putInt("integer", mInteger);
}
}
Tidak ada komentar:
Posting Komentar