Android勉強日記3

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として定義される。

ブロードキャストレシーバ

名前のまんまブロードキャストを受信して処理を実行するコンポーネント
BroadcastReceiverのサブクラスとして作成し、マニフェストファイルにはreceiverとして定義される。
システムから通知されるバッテリ残量や設定の変更や、他のアプリケーションからブロードキャストで送信されたものを受信できる。

コンテンツプロバイダ

あるアプリケーションが管理しているデータを他のアプリケーションで使用出来るようにするコンポーネント
コンテンツプロバイダに提供されたデータにはContentResolverクラスを用いてアクセスできる。
ContentProviderのサブクラスとして作成し、マニフェストファイルにはproviderとして定義される。

コンポーネントの起動

コンテンツプロバイダを除くコンポーネントの起動にはIntentを用いる。
※コンテンツプロバイダの起動には前述のContentResolverを用いる。
Intentには明示的なものと暗黙的なものが存在する。
明示的なIntentではパッケージやクラス名を指定する必要があるため、コンポーネント同士が密結合になってしまうが、暗黙的なIntentでは疎結合にできるみたい。
いまいち理解できてないので暗黙的なIntentはあとで復習します。

明示的なIntentの例。

Intent intent = new Intent();
intent.setClassName(getApplicationContext(), "helloworld.HelloWorldActivity2");
startActivity(intent);

以上のような形で指定したActivityへの画面遷移ができるみたい。

スポンサーリンク