Androidのプログラミングにおいて、Context
クラスとは何か、またその用途は何か。
開発者向けサイト]1で読んだのですが、よく理解できません。
簡単に言うと
その名の通り、アプリケーション/オブジェクトの現在の状態を表すコンテキストです。新しく作成されたオブジェクトに、これまでの状況を理解させます。一般的には、プログラムの別の部分(アクティビティやパッケージ/アプリケーション)に関する情報を得るために呼び出します。
コンテキストは getApplicationContext()
, getContext()
, getBaseContext()
, this
(Application, Activity, Service, IntentServiceクラスのようにContext
を継承したクラスの場合)を呼び出すことで取得できます。
コンテキストの典型的な使用例です。
新しいオブジェクトの作成。 新しいビュー、アダプター、リスナーの作成。
TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
標準的な共通リソースへのアクセス。 LAYOUT_INFLATER_SERVICEのようなサービス、SharedPreferences:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
暗黙的にコンポーネントにアクセスする。 コンテンツプロバイダ、ブロードキャスト、インテントについて
getApplicationContext().getContentResolver().query(uri, ...);
コンテキストとは、システムに対するハンドルであり、リソースの解決、データベースやプリファレンスへのアクセスの取得などのサービスを提供します。Androidアプリにはアクティビティがあります。Contextは、アプリケーションが現在実行されている環境のハンドルのようなものです。アクティビティオブジェクトは、Contextオブジェクトを継承しています。
詳しくは、Android StudioによるAndroid開発入門 - チュートリアルをご覧ください。
AndroidのContextは、アプリケーション固有のリソースやクラス、アプリケーション環境に関する情報へのアクセスを可能にするInterfaceです(一般的な意味であり、Javaでは「Context」は実際には抽象クラスです)。
もしあなたのアンドロイドアプリがウェブアプリだったら、あなたのコンテキストはServletContext
に似たものになるでしょう(ここで正確に比較しているわけではありません)。
アクティビティやサービスもContext
を継承しているので、アプリが実行されている環境情報にアクセスするためのメソッドをすべて継承しています。