Minggu, 05 Desember 2010

Activityの状態を保存

主に、システムにActivityが強制終了させられる(システムにActivityが殺される)場合は、下記の3通りになります。

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

 
Copyright 2010 hot news. All rights reserved.
Themes by Ex Templates Blogger Templates l Home Recordings l Studio Rekaman Sitemap New gadget news Luxury Car Review Celebrity News Head Line News News Trends Concept cars Gambar Mesin Circuit Electronic Celebrity News Trends MotoGP News Trends Ghost Mistery Honda Modify Ghost photo Collection Credit Card Mstered Flower Colelction Photo Hybrid Auto News Modification Auto Indonesian News Trends Day News Trends Automotive News Trends vex robotic kit Hot News Trends