最後に,アプリケーションが実行されるときのAndroidの内部的な動きを解説しよう。電話帳,カメラ,カレンダなど,Android携帯のユーザーが実際に操作するプログラムは,すべてこのアプリケーション層に入る。
Androidでは,特別扱いのアプリケーションはない*2。つまり,フレームワークが提供するAPIはすべて第3者に公開されている。開発者はどんなアプリケーションでも開発でき,多くの開発者がさまざまなアプリケーションをリリースしている。
ここでは,Android用のアプリケーション配信サービスである「Android Market」から入手できる2つのアプリケーションを紹介する。これらのアプリケーションがAndroid内部で具体的にどのように動作しているのかを説明する。
●ポケットスケッチ
ポケットスケッチは,タッチパネルを使い,指でなぞるだけで絵が描ける簡易ペイント・アプリケーションだ(写真2)。登録名「EMOTIONPLUS」が公開している。見た目は地味だが,描画領域を無段階に拡大・縮小できるなど,有用な機能が搭載されている。
ユーザーの操作に応じてアプリケーションがどのようにして画面に線を描画するのかを見てみよう。
まず,端末のタッチパネルにユーザーが触れると,カーネル上のデバイス・ドライバがその入力を受け取る。これはキーボード・ドライバやマウス・ドライバと同じ,入力用のデバイス・ドライバである。
ドライバは,ユーザーのタッチする操作を,パネルがタッチされた瞬間,タッチされている間,離された瞬間という3種類の入力情報としてプロセスに伝える。その他にも,タッチパネルの精度や圧力などの情報が含まれる場合もある。
このプロセス上で動作しているのはアプリケーションの実行環境(Dalvik VM)である。ドライバからプロセスに渡された入力情報は,最終的にはDalvik VMを通してアプリケーションに入力される。
アプリケーションがタッチパネルの入力を受け取る方法は,アプリケーション・フレームワークがAPIとして提供している。従って,開発者は,フレームワーク層以下を意識する必要はなく,タッチパネルのイベントに対してどのような処理を実行するのかをJavaで実装すればよい。
このようにして,ポケットスケッチは,ユーザーがパネルをタッチして離すまでの間,タッチされている座標上に色を描画し続け,線や図形を描く機能を実現している。
また,ライブラリ層に位置するMedia Frameworkは,キャンバスに描いた絵を圧縮して保存する機能を提供している。ポケットスケッチは,描画したデータをPNG形式で保存する。その出力にもMedia Frameworkを利用している。Media Frameworkを使って画像を変換するAPIをフレームワーク層が提供しており,開発者はこのAPIを利用して高速なネイティブ・ライブラリによる画像変換などをJavaから処理できるのである。