2011年6月5日日曜日

Activityのライフサイクル(状態遷移)について

今回は、Activity(Androidアプリの画面に相当する)の開始から終了までの
ライフサイクル(状態遷移)について勉強したいと思います。

軽く調べてみたところ、ライフサイクルをフローチャート?で表現すると、
下記の図のようになるようです。



Excelで書いたので、若干線が凸凹してますね・・・

それぞれのメソッドの動作タイミングとしては、下記の図のタイミングで動作する様です。


これらの動きを実際にメソッドを記述することで、確認してみたいと思います。

では、今までの勉強したとおりに、Eclipseを起動してAndroidプロジェクトを作ってみたいと思います。
今回は、Lifecycleというプロジェクトを作成しました。


上記で作成した、src/sample/lifecycle/Lifecycle.java(Activityを継承しているクラスです。)
を開いて下記の記述を追加します。


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(this, "onCreate()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(this, "onStart()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Toast.makeText(this, "onRestart()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this, "onResume()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(this, "onPause()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(this, "onStop()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "onDestroy()", Toast.LENGTH_SHORT).show();
    }


何のことはない、スーパークラスの各メソッドをオーバーライドして、
スーパークラスの同メソッドを呼び出し(super.対象メソッド();の部分)、
Toastしているだけですね。

さて、この記述の中で異彩を放っているというか初めて出てきたAndroidっぽい?記述の
Toastが何かと申しますと、Google翻訳をかけてみたところ、Toast=トーストという
投げっぱなされたような翻訳がされてしまいました・・・
まあ、パンなんですね(英語力に難あり)。で、画面上はどの機能になるのかというと、

上記のハードコピーの赤線の部分、Androidスマートフォンを使っている方なら
見たことがあるかもしれない。この表示方法がToastみたいです。

つまりToast.makeText(this, "onDestroy()", Toast.LENGTH_SHORT).show();の部分は、

  1. Toastというクラス(上のハードコピーの赤い線の部分ですね。)を作るために。
  2. makeTextという静的(static)メソッドを呼び出します。
  3. 1つ目の引数は、どのContextに表示するかを指定。
  4. 2つ目の引数は、表示したいメッセージを指定。
  5. 3つ目の引数は、表示時間を指定(SHORT or LONG)。
  6. 最後にToastクラスのshowメソッドを実行して表示する。

という流れになるのかなと考えてみました。(間違っていたら指摘いただけると幸いです。)
解説が終了したところで、実際に動かしてみたいと思います。

以前当HPで記述した実行方法(エミュレーター起動、実機起動)のどちらでもいいので、
LifeCycleプロジェクトを起動してみてください。

起動後に、瞬く間に『onCreate()』、『onStart()』、『onResume()』が流れると思います。
そこで、戻るボタンを押すと、
今度は、『onPause()』、『onStop()』、勢い余って『onDestroy()』も流れるかもしれません。
※ボタン操作によって、onStop()で終了している場合は、次に実行した際に『onRestart()』が
  よばれると思います。
  
といった感じでどのタイミングでどの処理がよばれるのか理解することができました。
今後はどのメソッドでどういう処理を組むのか考えていく必要がありそうですね。

次回は、いよいよ画面作成に入れるといいなと思っております。

ではでは。

2 件のコメント:

  1. いつも楽しみにしています。
    ご参考にされている文献とか、Webサイト等ありましたら、挙げていただくとうれしいです。

    返信削除
  2. kmrさんコメントありがとうございます。
    今後の更新では問題がなさそうであれば参考サイトをリンクとして残していきたいと思います。

    返信削除