Androidのコンポーネントについて
以下の4種類のコンポーネントが存在する。
また、1つのアプリケーションがこのすべてのコンポーネントを持つ必要はない。
- アクティビティ
- サービス
- ブロードキャストレシーバ
- コンテンツプロバイダ
アクティビティ
唯一ユーザーインターフェースを持つコンポーネント。
画面の数だけアクティビティがあるようなイメージだと思われる。
前回のエントリで作ったアプリでは、コンポーネントがこの「アクティビティ」しか存在しない。
これが、Activityクラスを継承したHelloWorldActivityクラスである。
アクティビティはactivityとしてマニフェストファイル(AndroidManifest.xml)に定義されている。
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorldActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
サービス
Activityと異なり、バックグラウンドで継続的に動作するため、終了は明示的に指示する必要がある。
Serviceクラスのサブクラスとして作成し、マニフェストファイルにはserviceとして定義される。
コンポーネントの起動
コンテンツプロバイダを除くコンポーネントの起動にはIntentを用いる。
※コンテンツプロバイダの起動には前述のContentResolverを用いる。
Intentには明示的なものと暗黙的なものが存在する。
明示的なIntentではパッケージやクラス名を指定する必要があるため、コンポーネント同士が密結合になってしまうが、暗黙的なIntentでは疎結合にできるみたい。
いまいち理解できてないので暗黙的なIntentはあとで復習します。
明示的なIntentの例。
Intent intent = new Intent(); intent.setClassName(getApplicationContext(), "helloworld.HelloWorldActivity2"); startActivity(intent);
以上のような形で指定したActivityへの画面遷移ができるみたい。