Android アクティビティ(Activity)

アクティビティは、ユーザーインターフェースを備えた単一の画面を表します。Javaのウィンドウやフレームのようなものです。AndroidのアクティビティはContextThemeWrapperクラスのサブクラスです。

C、C++またはJava言語でプログラミングしたことがあれば、これらのプログラムがmain()関数から始まることを知っているはずです。これと非常に似て、AndroidシステムはアクティビティのonCreate()コールバックの呼び出しによってプログラムを初期化します。アクティビティを起動するための一連のコールバックメソッドが存在し、同時にアクティビティを閉じるための一連のメソッドもあります。以下のアクティビティライフサイクル図のようになります:

图片

Activityクラスは以下のコールバックを定義しています。すべてのコールバックメソッドを実装する必要はありません。しかし、それぞれを理解することは非常に重要です。これらを実装することで、アプリの動作がユーザーの期待通りになることを保証できます。

コールバック 説明
onCreate() これは最初のコールバックで、アクティビティが最初に作成されたときに呼び出されます
onStart() このコールバックは、アクティビティがユーザーに表示されるときに呼び出されます
onResume() このコールバックは、アプリケーションがユーザーと対話を開始するときに呼び出されます
onPause() 一時停止されたアクティビティはユーザー入力を受け付けず、コードを実行できません。現在のアクティビティが一時停止され、前のアクティビティが復元されるときに呼び出されます
onStop() アクティビティが表示されなくなったときに呼び出されます
onDestroy() アクティビティがシステムによって破棄される前に呼び出されます
onRestart() アクティビティが停止された後に再び開かれるときに呼び出されます

例

この例では、簡単な手順でAndroidアプリケーションのアクティビティのライフサイクルを示します。以下の手順に従って、Hello Worldの例の章で作成したAndroidアプリケーションを修正します。

手順 説明
1 Eclipse IDEを使用してAndroidアプリケーションを作成し、HelloWorldという名前を付けてcom.example.helloworldパッケージに配置します。以前のHello World Exampleの章で紹介したとおりです。
2 以下のようにメインのアクティビティファイルMainActivity.javaを修正します。他の部分は変更しないままにします。
3 アプリケーションを実行してAndroidエミュレータを開き、アプリケーションの変更結果を確認します。

以下は、メインのアクティビティファイルsrc/com.example.helloworld/MainActivity.javaの変更内容です。基本的なライフサイクルメソッドがすべて含まれています。Log.d()メソッドはログ情報を生成するために使用されます:

package com.example.helloworld;

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

public class MainActivity extends Activity {
   String msg = "Android : ";

   /** 当活动第一次被创建时调用 */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   /** 当活动即将可见时调用 */
   @Override
   protected void onStart() {
      super.onStart();
      Log.d(msg, "The onStart() event");
   }

   /** 当活动可见时调用 */
   @Override
   protected void onResume() {
      super.onResume();
      Log.d(msg, "The onResume() event");
   }

   /** 当其他活动获得焦点时调用 */
   @Override
   protected void onPause() {
      super.onPause();
      Log.d(msg, "The onPause() event");
   }

   /** 当活动不再可见时调用 */
   @Override
   protected void onStop() {
      super.onStop();
      Log.d(msg, "The onStop() event");
   }

   /** 当活动将被销毁时调用 */
   @Override
   public void onDestroy() {
      super.onDestroy();
      Log.d(msg, "The onDestroy() event");
   }
}

アクティビティクラスは、プロジェクトのres/layout内のXMLファイルからすべてのUIコンポーネントを読み込みます。次のステートメントは、res/layout/activity_main.xmlファイルからUIコンポーネントを読み込みます:

setContentView(R.layout.activity_main);

アプリケーションは1つまたは複数のアクティビティを持つことができ、制限はありません。アプリケーション用に定義された各アクティビティはAndroidManifest.xmlで宣言する必要があります。アプリのメインアクティビティはマニフェストで宣言する必要があり、インテントフィルタータグにはMAINアクションとLAUNCHERカテゴリを含める必要があります。以下のとおりです:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >

   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="22" />

   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >

       <activity
          android:name=".MainActivity"
          android:label="@string/title_activity_main" >

          <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER"/>
          </intent-filter>

       </activity>

   </application>
</manifest>

MAINアクションまたはLAUNCHERカテゴリのいずれかがアクティビティで宣言されていない場合、アプリケーションのアイコンはホーム画面のアプリリストに表示されません。

修正したばかりの「Hello World!」アプリケーションを実行してみましょう。環境構築のときにAVDを作成済みであると仮定します。Eclipseからアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーから実行をクリックします图片アイコン。EclipseはAVDにアプリをインストールして起動します。すべてがうまくいけば、以下のようなエミュレータ画面が表示され、Eclipse IDEのLogCatウィンドウでログ情報を確認できます:

07-19 15:00:43.405: D/Android :(866): The onCreate() event
07-19 15:00:43.405: D/Android :(866): The onStart() event
07-19 15:00:43.415: D/Android :(866): The onResume() event

Androidエミュレータの赤いボタンをクリックしましょう图片すると、Eclipse IDEのLogCatウィンドウに以下のイベントメッセージが生成されます:

<code>07-19 15:01:10.995: D/Android :(866): The onPause() event
07-19 15:01:12.705: D/Android :(866): The onStop() event
</code>

Androidエミュレータのメニューボタンをもう一度クリックしましょう图片すると、Eclipse IDE の LogCat ウィンドウに以下のイベントメッセージが生成されます:

<code>07-19 15:01:13.995: D/Android :(866): The onStart() event
07-19 15:01:14.705: D/Android :(866): The onResume() event
</code>

次に、Androidエミュレータの戻るボタンをクリックしましょう图片すると、Eclipse IDEのLogCatウィンドウに以下のイベントメッセージが生成され、Androidアプリケーションのアクティビティのライフサイクル全体が完了します。

07-19 15:33:15.687: D/Android :(992): The onPause() event
07-19 15:33:15.525: D/Android :(992): The onStop() event
07-19 15:33:15.525: D/Android :(992): The onDestroy() event
その他の拡張