Androidにはコンテキストが多々出てくる。
ややこしいため、調べたことを記載。
コンテキストとは、アプリ環境のグローバルな情報へのインタフェース。
Contextクラスを利用して
アプリケーションのリソース、クラス、
アプリケーションレベルのオペレーション(アクティビティの起動、ブロードキャスト、インテントの受信など)
にアクセスすることができる。
現在のアプリやオブジェクトの状態取得できる窓口であるが、以下の3種類で取得できる。
・Activityクラスのthis (アクティビティ・コンテキスト)
・getApplicationContext() (アプリ・コンテキスト)
・getBaseContext() (ベース・コンテキスト)
(注1:ベース・コンテキストは、公式な名称ではなく、勝手に命名してます。)
(注2:サービスクラスのthisは、何コンテキストと言うのか不明)
アクティビティやサービスのthisは、
アプリコンテキストとベースコンテキストの参照を持っていることを確認。
(※参照を持っているだけで、アクティビティ・コンテキストが、
アプリ・コンテキストやベース・コンテキストを生成しているとは考えにくい)
なお、アクティビティやサービスは、Contextクラスを継承しているため、thisやContextメソッドが使用できる。
ところが、googleエンジニアの一人は、ベース・コンテキスト(getBaseContext)は使用しないで、と言っている。
(今まで、getBaseContext使っているところは、見直す必要がありそうだ)
アプリ・コンテキストおよび、アクティビティ・コンテキストのライフサイクルは、
アプリはアプリ、アクティビティはアクティビティのライフサイクルに依存する。
サービスの登録と解除に関しては、アクティビティ・コンテキストで登録したものは、
アクティビティ破棄時に、開発者がサービス解除を忘れても、フレームワークが解除するとのこと。
ただし、アプリ・コンテキストの場合は、解除わすれるとメモリリークになるとのこと。
0 件のコメント:
コメントを投稿