コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Androidアプリ入門 No.58 ライフサイクル ライフサイクルの初歩

ライフサイクル

ここで、いままであえて取り上げてこなかったライフサイクルを取り上げる。Android開発において必ず知っておかないといけない必須の要素である。特にAndroidは電話機でもあるためアプリケーションの実行中に電話がかかってくることもある。そういった場合に正しい対応をしないと、アプリケーションが予期せない動作をしてしまう。

ライフサイクルの初歩

まず、ライフサイクルがどのようになっているかを見る。先の例であげたIntentTestプロジェクトのMainActivity.javaを以下のように変更する。

package sample.it;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
    private WebView webView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("MainActivity", "onCreate");
        setContentView(R.layout.main);

        webView = (WebView) findViewById(R.id.webView);
        webView.setWebViewClient(new WebViewClient());

        String url = "http://d.hatena.ne.jp/kuwalab/";
        if ("net.kuwalab.web".equals(getIntent().getAction())) {
            url = getIntent().getData().toString();
        }

        webView.loadUrl(url);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MainActivity", "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MainActivity", "onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MainActivity", "onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MainActivity", "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MainActivity", "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MainActivity", "onDestroy");
    }
}

ライフサイクルには、後述するがonCreate、onStart、onResume、onRestart、onPause、onStop、onDestroyの7つがある。それぞれ、Acitivyクラスで実装されているがそれをオーバーライドして、ログを出力するようにする。
ログは、Logクラスを用いて出力することができる。ログクラスは、主に以下のメソッドを用いればよい。

ログレベル メソッド
VERBOSE v(String tag, String message)
DEBUG d(String tag, String message)
INFO i(String tag, String message)
WARN w(String tag, String message)
ERROR e(String tag, String message)
ASSERT a(String tag, String message)

VERBOSEがログのレベルとしては低く、ASSERTは最高レベルとなる。メソッドはそれぞれの先頭の一文字という簡単なものとなっている。1番目の引数のtagはEclipseのDDMSパースペクティブで表示されるLogCatビューのタグのことである。また、messageはそのままログに出力するメッセージとなる。実際に上記のActivityを実行するとLogCatには以下のように出力される。

戻るボタンでアプリケーションを停止すると、続けて以下のログが出力される。

起動時にはonCreate、onStart、onResumeの順で呼び出されて、終了時にはonPause、onStop、onDestroyの順で呼び出されているのがわかる。