2011年7月18日月曜日

Androidのコンテキストについて

Androidにはコンテキストが多々出てくる。

ややこしいため、調べたことを記載。

コンテキストとは、アプリ環境のグローバルな情報へのインタフェース。

Contextクラスを利用して
アプリケーションのリソース、クラス、
アプリケーションレベルのオペレーション(アクティビティの起動、ブロードキャスト、インテントの受信など)
にアクセスすることができる。

現在のアプリやオブジェクトの状態取得できる窓口であるが、以下の3種類で取得できる。

・Activityクラスのthis (アクティビティ・コンテキスト)
・getApplicationContext() (アプリ・コンテキスト)
・getBaseContext() (ベース・コンテキスト)

(注1:ベース・コンテキストは、公式な名称ではなく、勝手に命名してます。)
(注2:サービスクラスのthisは、何コンテキストと言うのか不明)

アクティビティやサービスのthisは、
アプリコンテキストとベースコンテキストの参照を持っていることを確認。

(※参照を持っているだけで、アクティビティ・コンテキストが、
 アプリ・コンテキストやベース・コンテキストを生成しているとは考えにくい)

なお、アクティビティやサービスは、Contextクラスを継承しているため、thisやContextメソッドが使用できる。

ところが、googleエンジニアの一人は、ベース・コンテキスト(getBaseContext)は使用しないで、と言っている。
(今まで、getBaseContext使っているところは、見直す必要がありそうだ)

アプリ・コンテキストおよび、アクティビティ・コンテキストのライフサイクルは、
アプリはアプリ、アクティビティはアクティビティのライフサイクルに依存する。

サービスの登録と解除に関しては、アクティビティ・コンテキストで登録したものは、
アクティビティ破棄時に、開発者がサービス解除を忘れても、フレームワークが解除するとのこと。
ただし、アプリ・コンテキストの場合は、解除わすれるとメモリリークになるとのこと。

0 件のコメント:

コメントを投稿