今回からはAndroidアプリについて、実際の構造や動きなどについて詳しく見ていきます。
アクティビティから構成される
Androidのアプリケーション
AndroidのアプリケーションはJavaで記述されますが、実体としてはアクティビティ(Activity)と呼ばれる画面を構成するオブジェクトになります。このアクティビティはAndroid上では1つの画面に相当し、表示されるボタンや入力欄などを管理します。
プログラミング上では、Activityクラスを継承するクラスを定義し、これがアプリケーションの本体となります。ただしアクティビティ自体は画面そのものではないので、この中で表示させるボタンなどを作ってやらねばなりません。
Android内では、ユーザーがアプリケーション画面からアイコンをタップしてアプリケーションを起動すると、内部で必要な準備を 行なったのち、アクティビティオブジェクトが作られます。その後、アクティビティクラスで定義されているメソッドが呼び出されます。このメソッドは、アプリケーション起動や終了、あるいは画面の回転などに応じて、指定されたものが順番に呼び出されます。このメソッドには、以下のようなものがあります。
onCreate
onStart
onResume
onPause
onStop
onDestory
onRestart
それがどのタイミングで呼び出されるのかを示すのが下の図です(Android Developersから)。前回(関連記事)のサンプルプログラムをエミュレーターで起動して実際に試してみます。
Eclipse内から実行させると、起動前の部分が見えないので、アプリケーションをBackキーで一回終了させます。ホームスクリーンでアプリケーション画面を開き、作成したアプリケーションをタップしてアプリケーションを起動します。すると画面には、Toastメッセージ(グレーの矩形枠の表示)で、「onCreate」「onStart」「onResume」が順番に表示されるはずです。ソースコードを見ると、これらのメッセージは、それぞれ対応するメソッドが呼び出されたときに表示されるので、これらのメソッドがこの順番で呼び出されたということがわかります。
では、アプリケーションを終了させてみましょう。ホームスクリーンが表示されるとともに「onPause」「onStop」「onDestry」の順にToastメッセージが表示されるはずです。
これが、先ほどの図の上から下への動きになります。では、もう一度アプリケーションを起動してください。今度はプログラムを終了させずに一旦バックグラウンドにします。そこでホームキーを押してください。すると「onPause」「onStop」が表示されますが、待っていても「onDestory」は表示されません。これはアプリケーションが終了せず、バックグラウンドで待機状態になっていることを示します。
では再開させてみましょう。再開させるにはホームキーを長押しして、メニューを表示させ、そこから「Dev Sample 1」を選択します。今度は「onRestart」「onStart」「onResume」の順にメッセージが表示されました。これは図の下から上に戻る経路に相当します。
今度は、画面を回転させてみましょう。エミュレーター内で画面を回転させるには、Ctrl+F11(またはテンキーの7)またはCtrl+F12(テンキーの9)を使います。このときメッセージは、
onPause
onStop
onDestory
onCreate
onStart
onResume
となります。これは画面の回転のときには、一旦アプリケーションが終了させられ、再度最初から起動されるということを意味します。単純なアプリケーションでは、あまり問題になりませんが、終了して再起動するのですから、状態を保存しておくなどいろいろと対策しておかねばなりません。もちろんセンサーに応じて勝手に回転することを禁止することも可能です。
Androidのアプリケーションとしては、このようにメソッドが順に呼び出されますが、必ずしもすべてのメソッドを用意する必要はありません。通常は、onCreateで画面表示などを行なわせて、onStart、onResumeなどは定義せず無視してしまってもかまいません。これらのメソッドは、親となるActivityクラスで定義されているので、なにも定義しなくともエラーにはなりません。また、Javaやオブジェクト指向をよくご存じのかたは、コンストラクターはどうなのかが気になるでしょう。基本的にはアクティビティでは、コンストラクター(とデコンストラクター)については何もする必要はなく、onCreateでアプリケーションが起動したあとの処理を書いてしまって問題ありません。
ただ、一旦ホームキーでホームスクリーンなどへ移ったあと、また、このプログラムに戻ってくるときに画面を更新させる必要があるかもしれません。基本的には最後の状態が保たれていますが、場合によっては、画面を更新させないとならない場合もあるでしょう。そういう場合には、onRestartなどで復帰する前準備を行ない、常にonStartかonResumeで画面を更新させるようにすることになるでしょう。このように各メソッドをその実行順に応じて使い分けることは、複雑なプログラムでは必要になってくることもあります。なので、しばらくは無視していてもかまいませんが、このような経路でアプリケーションが実行されるということは頭の片隅に置いておいてください。
この連載の記事
-
第11回
スマホ
アプリケーションをAndroidマーケットに登録する -
第10回
スマホ
ブロードキャストへの応答とタイマ割り込み -
第9回
スマホ
Androidアプリで複数の項目を表示するリストビューを使う -
第8回
スマホ
Androidアプリに必要なダイアログを作る -
第7回
スマホ
Androidアプリの設定画面を作成する -
第6回
スマホ
Androidアプリ内で表示されるメニューを作成する -
第5回
スマホ
インテントによるアプリケーションとアクティビティの呼出し -
第4回
スマホ
Androidアプリを構成する「アクティビティ」を実際に作る -
第2回
スマホ
開発したアプリをエミュレーターやデバッガ上でテストする -
第1回
スマホ
Androidアプリの開発環境であるEclipseの使い方を知る - この連載の一覧へ