Home > Android > Activityのライフサイクル

Activityのライフサイクル

3月 24th, 2009

・Activityのライフサイクル
今回はAndroidにおいてUIの基礎となるActivityについて見ていきます。
Android DevelopersのReferenceや、日本Androidの会の勉強会のページでまとめられているので、改めて書く必要はないかもしれませんが、一応さらっと流してみたいと思います。
まず最初に覚えておく必要があるのは、Activityのライフサイクルです。
Android Developersサイト及び日本Androidの会のどちらにも似たようなライフサイクルを表した図があります。
これを見ると、Activityが表示されるまでに、onCreate()、onStart()、onResume()の3つのメソッドが呼ばれて初めてrunning状態になることがわかります。その後、Activityの一部が見えなくなる(最前列ではなくなる)場合にはonPause()が呼ばれ、Activityの全てが隠れてしまった場合、onStop()が呼ばれます。この、最前列でなくなってしまったPause状態、Stop状態のActivityはAndroidのシステムからメモリの空き具合などによってKillされてしまう可能性があります。ただし、システムがKillする場合でも、ユーザによって明示的に終了する場合でもonDestroy()は呼ばれるので、ここで終了処理をすることは可能だと思います。

・helloworldのActivity
ここでhelloworld.javaを例として取り上げてみます。

package jp.demo.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class helloworld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

helloworldクラスはActivityクラスを継承して、onCreateメソッドをOverrideしています。
onCreateメソッドの中ではsetContentView()によってレイアウトを設定しています。
例えば、setContentView()を呼び出すのをonCreate()ではなくonStart()やonResume()にしても、画面に表示される前に呼び出されるメソッドなので、同じように表示されるはずです。
例えばonResume()に書いてみます。

package jp.demo.helloworld;

import android.app.Activity;
import android.os.Bundle;

public class helloworld extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onResume(){
        super.onResume();
        setContentView(R.layout.main);
    }
}

このように書き換え、実行してみても、エミュレータ上には前と同じように、下記のように表示されるかと思います。
helloworld

 Activityがいきなりkillされるというのが中々取っ付きにくい部分かもしれませんが、ライフサイクルのどの部分でkillされる可能性があるかを確認すれば、そこまで複雑ではないことが分かります。
 まずはライフサイクルとにらめっこ、ですね。

taga Android