アクティビティのライフサイクル メモ

  • このエントリーをはてなブックマークに追加
  • Pocket

ライフサイクル

  • アクティビティの状態は、実行中、一時停止、停止の3状態。それぞれの状態を遷移する際に、onCreate()などのon~~()と名付けられたコールバックメソッドが呼ばれる。このコールバックメソッドをオーバーライドして、状態遷移の際にさせたい処理を記述する。主なものは以下の7メソッドである。これらのメソッドのもつ役割は覚えておかないと、どこに処理を記述すべきかわからない。間違った場所に記述するとアクティビティのクラッシュを招く。これ以外にもコールバックメソッドは存在する。
↓onCreate()               ↑onDestroy()

    <停止>           ---  不可視の状態。ホーム/スリープ中も含む。

↓onStart()/onRestart()    ↑onStop()

    <一時停止>    ---  他のアクティビティが<実行中>だが、このアクティビティの一部が隠れている/透過している。例えば、ダイアログの表示中。

↓onResume()              ↑onPause() 

    <実行中>

 

こまごま

  • onPause(): これ以降はアクティビティのインスタンスが破棄される可能性があるので、永続的なデータは保存処理を行う。
  • onSaveInstanceState(): アクティビティの状態が保存されるべきときにonStop()の前に呼ばれる。ユーザが戻るボタンで明示的にアクティビティを終了させたときには呼ばれない。大半のandroidフレームワークのWidgetについては、android:idを付加してある場合は、自動でWidgetの状態が保存される。追加の保存処理は、@Overrideしてsuper()を呼んだ後ろに記述する。渡されたBundleに保存する。
  • Aから、他のアクティビティBに切り替わるとき、A[onPause()] -> B[onCreate(), onStart(), onResume()] -> A[onStop()] と呼ばれるため、Bに渡すデータはonPause()で準備する。
  • 挙動確認用として以下のようなコードを任意のコールバックメソッドに挿入すれば、メソッドが呼ばれたときにToast(メッセージ)が表示される。
  • @Override
    public void onRestart(){
        super.onRestart();
        String text = new Throwable().getStackTrace()[0].getMethodName();
        Toast.makeText(this, text, Toast.LENGTH_LONG).show();
    }

参考文献

 

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す