アプリケーション・フレームワーク

 アプリケーション・フレームワーク層では主に,アプリケーションの起動から終了までの流れ,すなわちライフサイクルの管理を実施する。加えて,ユーザー・インタフェースの表示やユーザーによる操作など携帯端末で起こるさまざまな状態の変化を,各アプリケーションに伝える手段も提供している。

 また,Java言語からCやC++などのプログラム(ネイティブ・コード)を利用できるように“ラッピング”した各種プログラム(ラッパー・クラス*)を用意している。これにより,アプリケーションから端末の状態を取得したり,ハードウエアにアクセスしたりする。アプリケーションの開発者は,ネイティブ・コードやカーネルを意識する必要がない。

* 【ラッパー・クラス】 あるライブラリが備えるAPIから別のAPIを使えるように“包み込む”クラスのこと。

 以下に代表的なフレームワークを解説する。

●Activity Manager

 「Activity Manager」は,各アプリケーションのアクティビティのライフサイクルを管理する役割を持っているフレームワークだ。アクティビティの開始から割り込みによる中断と再開,終了にかかわる一連の流れを,Androidでは「アクティビティのライフサイクル」と呼ぶ(図5)。

[画像のクリックで拡大表示]

 アクティビティは,ユーザーが操作可能な画面と,操作に対応する処理を持つ。Androidアプリケーションの設計指針では,アクティビティを画面遷移の最小要素と位置付けている。つまり,1つの画面に1つのアクティビティがある。画面の切り替えを伴うアプリケーションは,複数のアクティビティで構成され,アクティビティ同士が相互に呼び出し合って画面遷移が実行される。

 Androidは,マルチタスクで複数の処理を同時に実行できるが,画面(フォアグラウンド)に表示されるアプリケーションは,常に1つと定められている。トランプのカードが重なっている様子を想像すると理解しやすいだろう。カードの1枚ずつがアクティビティで,呼び出されたアクティビティが一番上(フォアグラウンド)に表示されるのである。

 携帯端末上で動作するアプリケーションは,さまざまな要因で割り込みが発生し,その都度中断される。例えば,電話が着信すれば着信画面に切り替わり,ユーザーが一定時間操作しなければ端末が“スリープ・モード”になる。

 割り込みの要因が終了した場合,例えば電話が終わったり,ユーザーが操作してスリープ・モードを解除したりした際には,元のアクティビティを中断前の状態から再開する必要がある。ゲームのアプリケーションの場合,電話の着信のタイミングで一時停止しておかなければ,電話が終わった時にゲームオーバーの画面が表示されているという悲劇は避けられない。

 Activity Managerは,カーネル上の各種ドライバ,例えば,電源管理ドライバや電話機能管理ドライバの状態変化に応じて,現在起動中のアプリケーション(正確にはアクティビティ)にライフサイクルの変化を通知する。

 これにより,表示中のアクティビティは,フレームワーク層より下(カーネルやドライバ,ハードウエア)を意識せずに,割り込みによる中断や再開,終了など,さまざまなタイミングで必要となる前処理を実行できるのだ。