2011年5月9日月曜日

Androidの明示的インテントと暗黙的インテントについて要点だけ

  • Androidアプリのインテントには「明示的インテント」と「暗黙的インテント」の2種類がある。
  • 明示的インテントは呼び出す側から「名指し」でアクティビティを起動する仕組み。
  • 暗黙的インテントは、呼び出す側はやりたい事だけを指定する。呼ばれるアクティビティ側が自分の処理できる内容を把握(宣言)している。
  • あるインテントを複数のアクティビティが処理できる場合、ユーザが選択できる。
AndroidアプリとiOSアプリの大きく違うところとして、アプリケーション間の連携の仕方がある。

Androidの場合は、アプリは複数の「アクティビティ」や「サービス」といった細かい実行単位に分かれていて、それらを「インテント」と呼ばれるメッセージのようなものを通じて連携させることでサービスを実現する。

この「インテント」を使ってアクティビティを起動する仕組みには2種類ある。
(1)明示的インテント
他のアクティビティを起動するときに、そのアクティビティ(Activityのサブクラス)のクラス名を直接指定する方式。
つまり呼び出す側が、呼び出されるアクティビティがどんな処理を行うことができるのかを把握している。たとえば「○○君(Activity)、このJpegデータよろしく」って感じ。呼び出す側は、この○○君がJpegを表示できることを知っている。

(2)暗黙的インテント
他のアクティビティを起動するときに、呼び出す側は処理したい内容(アクションetc)だけをOSに伝える。これを伝えられたOSは、インストールされたアクティビティの一覧から、受け取ったインテントを処理できるアクティビティをピックアップして処理内容およびデータを伝える。たとえば「誰かー!このJpeg画像を表示してほしいんだけど」というような感じ。Windowsで言えば拡張子とアプリケーションの関連づけに似ていると言ってもいいかもしれない。

あるアクティビティが暗黙的インテントを処理できることをOSに伝える場合には、「インテントフィルター」という仕組みを使ってOSに自分が対応できるインテントの内容を宣言する。一つのアクティビティにインテントフィルターは複数設定できる。つまり一つのアクティビティは複数のインテントに対応しうる。

暗黙的インテントを使う場合は仕組み上、発行された暗黙的インテントを処理できるActivityが複数個、端末にインストールされていることが考えられる。その場合はどうなるか?以下の画面のように、ユーザに選択させる画面が表示される。たとえばWebブラウザをインストールしたり、ホームアプリをインストールした場合にはこんな画面を見た事があるはず。


ちなみにこの画面でActivity Aは呼び出し側とは別のアプリ(パッケージ)、Activity Bは呼び出し側と同じパッケージに含まれている。しかしこの2つは特に優先順位付けなどによって区別されておらず、並列に扱われていることに注目したい。ここから分かることは、AndoridにおいてはiOSよりも「アプリ」という概念が希薄で、それよりも細かいアクティビティという「実行単位」が複数あり、これらがOSの中を飛び交っているインテントを通じて連携し、ユーザにサービスを提供しているということ。

「Androidらしい」アプリを開発するにはこのインテントの仕組みについてしっかりと把握することが必要不可欠といえる。

0 件のコメント:

コメントを投稿