不正確な表現だがアクティビティはウィンドウのコントロールとビューを表現したものだといえる。アクティビティが起動された際にアクティビティは自分の描画領域に対してGUIパーツ(ビュー)を配置し、他のウインドウ(アクティビティ)が起動されると状態を保存し、一時停止扱いとなり、上にあるウインドウが消えるとまたアクティブになる。
また、アクティビティクラスはユーザー側で継承して使用するのが普通である。次にアクティビティクラスの生成についてだが、基本的にユーザーコードからアクティビティを生成してはいけない。アクティビティの寿命管理はAndroidのアプリケーションフレームワークが行い、ユーザーはそれに対して通知を送るだけとなる。(linuxやwindowsでプロセスの生成をシステムに指示する事はあっても、ユーザーが直接プロセスを生成しないのと同じである。)だから、生成されたアクティビティクラスの初期化はアクティビティが生成されたタイミングにて起動されるonCreateメソッドにて行う必要がある。
他にもアクティビティの寿命状態が変化するたびに以下の様に通知メソッドが起動される。ここで重要なのはアクティビティがバックグラウンドに回され、onPauseメソッドが起動された後はいつでもアクティビティを格納しているプロセスが削除される可能性があるということで、永続的な情報はここで記憶しておかなければならない。(例えば、メーラーでメール作成中にwebページを見たくなり、ブラウザを起動したら作成中のメールが消えてしまったと言うことは避けたい。そういった場合はブラウザを起動して、メーラーのonPauseメソッドが起動されたタイミングで作成中のメールを記憶しておく必要がある。)
代表的な状態遷移だけ、実例で見てみよう。以下のソースは状態が変化するとそれに応じてログを出力させる様にしてある。ログ出力についてはその他でアプリケーションの作り方についてはGUIチュートリアルで解説しているため、そちらを見て欲しい。
package com.suddenAngerSystem;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
public class ActivityStateTransition extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e("ActivityState", "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.e("ActivityState", "onStart");
}
@Override
protected void onPause() {
super.onPause();
Log.e("ActivityState", "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.e("ActivityState", "onStop");
}
}
この段階ではアクティビティの状態遷移については分かりづらいかもしれない。そのため、他の項目を実施した後に確認しても良いだろう。