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); } }