このページの本文へ

前へ 1 2 3 4 次へ

これで作れる! Androidのアプリケーション ― 第3回

アプリケーションの基本となる「アクティビティ」

2010年07月15日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回からはAndroidアプリについて、実際の構造や動きなどについて詳しく見ていきます。

アクティビティから構成される
Androidのアプリケーション

 AndroidのアプリケーションはJavaで記述されますが、実体としてはアクティビティ(Activity)と呼ばれる画面を構成するオブジェクトになります。このアクティビティはAndroid上では1つの画面に相当し、表示されるボタンや入力欄などを管理します。

 プログラミング上では、Activityクラスを継承するクラスを定義し、これがアプリケーションの本体となります。ただしアクティビティ自体は画面そのものではないので、この中で表示させるボタンなどを作ってやらねばなりません。

 Android内では、ユーザーがアプリケーション画面からアイコンをタップしてアプリケーションを起動すると、内部で必要な準備を 行なったのち、アクティビティオブジェクトが作られます。その後、アクティビティクラスで定義されているメソッドが呼び出されます。このメソッドは、アプリケーション起動や終了、あるいは画面の回転などに応じて、指定されたものが順番に呼び出されます。このメソッドには、以下のようなものがあります。

onCreate
onStart
onResume
onPause
onStop
onDestory
onRestart

 それがどのタイミングで呼び出されるのかを示すのが下の図です(Android Developersから)。前回(関連記事)のサンプルプログラムをエミュレーターで起動して実際に試してみます。

アプリケーションが起動されるとシステム側で環境を整えたのち、activityクラス(のインスタンス)が動き出す。このとき、Android側はあらかじめ定義されているメソッド「onCreate」「onStart」「onResume」を順番に呼び出し、その中でActivityの画面が作られて表示される。その後ユーザーがホームキーや戻るキーを押したり、アプリケーションが別のActivityを起動するなどするしたあと、やはりあらかじめ定義されている「onPause」「onStop」「onDestory」などが呼び出される。アプリケーションが終了させられていない場合は「onRestart」経由で戻ってくる

 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で画面を更新させるようにすることになるでしょう。このように各メソッドをその実行順に応じて使い分けることは、複雑なプログラムでは必要になってくることもあります。なので、しばらくは無視していてもかまいませんが、このような経路でアプリケーションが実行されるということは頭の片隅に置いておいてください。

前へ 1 2 3 4 次へ

この連載の記事

注目ニュース

最新記事

ASCII.jp特設サイト

ASCII.jpメール デジタルMac/iPodマガジン

ASCII.jp RSS2.0 配信中

ピックアップ

富士通パソコンFMVの直販サイト富士通 WEB MART