Intentで処理を依頼

 AndroidのAPIで特徴的な考え方の一つが「Intent」である。プログラム間連携の仕組みで,CORBAやCOMの仕組みをさらに進化させたものといえる。Androidのプログラムの場合,原則としてアプリケーション・プログラムはそれぞれ独立した論理メモリ空間で動作する。このため,直接セマフォなどを使ってメモリを共有するといったことはできない。そこで他のプログラムに処理してほしいことをIntentとして定義する。このIntentを処理できるプログラムをOSが適宜割り当てる形を採る(図10)。例えば,あるプログラムがHTMLの描画処理を依頼するには,その旨を記述したIntentを作ってOSに渡す。OSはIntentの内容に応じてWebKitの描画エンジンに処理を渡し,描画結果を受け取って元のプログラムに戻す。これらの処理は非同期的に実行される。

図10 ActivityとIntent Androidのプログラミングにおいて,特徴的な存在がActivityとIntentである。Activityはユーザー・インタフェースを持つプログラムであれば,必ず備えていなければならない。IntentはActivityなどがデータの処理を依頼する際に,意向を明示するためのデータ構造で,Intentに対応する適切なプログラムをAndroidのActivity Managerとカーネルが適切に判定して処理を割り当てる。Intentを受け取れるのは,Androidが規定する四つの実装形態のうちActivityとIntent Receiverである。ユーザー・インタフェースを持つプログラムが受け取る場合はActivityとして実装し,すべてバックグラウンドで通信する場合はIntent Receiverとして実装する。
図10 ActivityとIntent Androidのプログラミングにおいて,特徴的な存在がActivityとIntentである。Activityはユーザー・インタフェースを持つプログラムであれば,必ず備えていなければならない。IntentはActivityなどがデータの処理を依頼する際に,意向を明示するためのデータ構造で,Intentに対応する適切なプログラムをAndroidのActivity Managerとカーネルが適切に判定して処理を割り当てる。Intentを受け取れるのは,Androidが規定する四つの実装形態のうちActivityとIntent Receiverである。ユーザー・インタフェースを持つプログラムが受け取る場合はActivityとして実装し,すべてバックグラウンドで通信する場合はIntent Receiverとして実装する。 (画像のクリックで拡大)

 Intentでの処理の指定方法は多岐にわたる。処理を実行するのが特定のプログラムでなければいけない場合は,直接プログラム名を指定することも可能である。実際,Androidでは待ち受け画面の表示に当たるホーム・プログラムから,アプリケーション・プログラムの実行を指定するのにIntentを使っている(図11)。

図11 Dalvik VMの実行ログと起動処理 AndroidSDKにはddmsというデバッグ・ツールが付属しており,これを通じてDalvik VMの処理ログなどを取得できる。プログラムの起動の過程を見ると,ホーム画面も一種のActivityとして実装されており,ホームからアプリケーション・プログラムを起動する場合にもIntentを使っていることが分かる。
図11 Dalvik VMの実行ログと起動処理 AndroidSDKにはddmsというデバッグ・ツールが付属しており,これを通じてDalvik VMの処理ログなどを取得できる。プログラムの起動の過程を見ると,ホーム画面も一種のActivityとして実装されており,ホームからアプリケーション・プログラムを起動する場合にもIntentを使っていることが分かる。 (画像のクリックで拡大)