Androidプログラミングでは、Context
クラスとは何ですか?またそれは何のために使用されますか?
開発者サイト で読みましたが、はっきり理解できません。
簡単に言えば:
名前が示すように、それはアプリケーション/オブジェクトの現在の状態のコンテキストです。それは新しく作成されたオブジェクトに何が起こっているのかを理解させます。通常、あなたはあなたのプログラムの他の部分(アクティビティとパッケージ/アプリケーション)に関する情報を得るためにそれを呼び出します。
コンテキストを取得するには、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, ...);
Person-Xがスタートアップソフトウェア会社のCEOであるとします。
会社にはリードアーキテクトがいます。このリードアーキテクトは、データベース、UIなどを含む会社内のすべての作業を行います。
今CEOは新しい開発者を雇います。
彼がデータベースまたはUIなどのどちらで作業するかは、新人のスキルに基づいて新入社員の責任を伝えるのは建築家です。
それはアプリのリソースへのAndroidのアクティビティのアクセスのようなものです。
それはあなたがホテルを訪れるとき、あなたが適切なタイミングで朝食、昼食、夕食を食べたい時に似ていますね。
あなたが滞在中に好きなことは他にもたくさんあります。どうやってこれらのことを手に入れますか?
あなたはルームサービスの人にあなたにこれらのものを持ってくるように頼みます。
ここでは、ルームサービス担当者が、あなたが単一の活動であり、ホテルがあなたのアプリであることを考えると、コンテキストになります。
コンテキストを含むものは以下のとおりです。
これを説明するもう1つの方法:テレビのリモコンとしてのコンテキストを考えるテレビのチャンネルはリソース、サービス、インテントなどを使用する - - - ここでremoteは、さまざまなリソースすべてにアクセスして前景にアクセスする
つまり、Remoteはインテントなどを使用して、リソース、サービスなどのチャネルにアクセスできます。
同様に...リモートへのアクセス権を持っている人は、リソース、サービス、インテントの使用などのすべてのものにアクセスできます
あなたが文脈を得ることができる異なる方法
getApplicationContext()
getContext()
getBaseContext()
this
(アクティビティクラスの場合)例:
TextView TV=new TextView(this);
this
- >は現在のアクティビティのコンテキストを参照します。
コンテキストはシステムへのハンドルです。リソースの解決、データベースや設定へのアクセスの取得などのサービスを提供します。 Androidアプリにはアクティビティがあります。コンテキストは、アプリケーションが現在実行されている環境へのハンドルのようなものです。アクティビティオブジェクトはコンテキストオブジェクトを継承します。
詳細については、Android StudioによるAndroid開発の概要 - チュートリアルを参照してください。
Context
は、アプリケーション環境に関するグローバル情報への「インターフェース」です。実際には、Context
は実際には 抽象クラス であり、その実装はAndroidシステムによって提供されます。
これにより、アプリケーション固有のリソースやクラスへのアクセス、およびアクティビティの起動、インテントのブロードキャストや受信などのアプリケーションレベルの操作の呼び出しが可能になります。
次の図では、クラスの階層がわかります。ここで、Context
はこの階層のルートクラスです。特に、Activity
はContext
の子孫であることを強調する価値があります。
Context
は正確に何ですか?
Androidのリファレンスドキュメントによると、これはさまざまな環境データを表すエンティティです。ローカルファイル、データベース、環境に関連するクラスローダー、サービス(システムレベルのサービスを含む)などへのアクセスを提供します。この本を通して、そしてあなたの日々のAndroidでのコーディングにおいて、あなたはContextが頻繁に回っていくのを見るでしょう。
" Android in Practice "の本、p。から。 60。
いくつかのAndroid APIはパラメータとしてContext
を必要とします
さまざまなAndroid APIを調べてみると、それらの多くがAndroid.content.Context
オブジェクトをパラメーターとして使用していることがわかります。また、アクティビティやサービスは通常Context
として使用されています。これらのクラスは両方ともContext
から継承されるため、これは機能します。
Androidでcontext
を理解するための簡単な例:
すべての上司には、それほど重要ではなく時間のかかる作業をすべて行うために、世話をするアシスタントがいます。ファイルやコーヒー1杯が必要な場合は、助手が走っています。何人かのボスはオフィスで何が起こっているのかほとんどわかっていないので、彼らはこれについてもアシスタントに尋ねます。彼らはいくつかの仕事を自分でやるが、他のほとんどのことのために彼らは彼らの助手の助けを必要とする。
このシナリオでは、
Boss - はAndroidアプリケーションです
アシスタント - コンテキストです
ファイル/コーヒー1杯 - リソース
アクティビティ、アプリケーションなど、アプリケーションのさまざまな部分に関する情報を取得する必要がある場合は、一般にコンテキストを呼び出します。
コンテキストが関係するいくつかの操作(アシスタントが必要とされるもの):
コンテキストを取得するさまざまな方法
getContext()
getBaseContext()
getApplicationContext()
this
初心者のためにそれを出すだけです。
だから最初に単語の文脈を理解する:
English-libにあります。その意味は:
「出来事、陳述、または考えのための設定を形成する状況、そしてそれに関してそれは完全に理解され評価されることができる。」
「言葉やパッセージの直前と後にあり、その意味を明確にしている、書かれたまたは話された何かの部分。」
それではプログラミングの世界にも同じことを理解してください。
アプリケーション/オブジェクトの現在の状態のコンテキスト。それは新しく作成されたオブジェクトに何が起こっているのかを理解させます。通常、あなたはあなたのプログラムの他の部分(アクティビティ、パッケージ/アプリケーション)に関する情報を得るためにそれを呼び出します
コンテキストを取得するには、getApplicationContext()
、getContext(), getBaseContext()
、またはthis
を呼び出します(アクティビティクラスの場合)。
アプリケーションでコンテキストを取得するには、次のコードを使用します。
Androidアプリケーション内に新しいクラスAppContext
を作成します。
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
非アクティビティクラスのアプリケーションコンテキストが欲しいときはいつでも、このメソッドを呼び出すだけでアプリケーションコンテキストができます。
この助けを願っています;)
それを、アプリまたはサービスが実行されているプロセスを無効にしているVMと考えてください。サイロ化された環境は、基礎となるシステム情報と特定の許可されたリソースにアクセスできます。それらのサービスを利用するには、そのコンテキストが必要です。
コンテキストは現在のオブジェクトへの参照です。またコンテキストは、アプリケーション環境に関する情報へのアクセスを許可します。
クラスAndroid.content.Context
は、Androidシステムとプロジェクトのリソースへの接続を提供します。これはアプリケーション環境に関するグローバル情報へのインターフェースです。
ContextはAndroidサービスへのアクセスも提供します。ロケーションサービス.
アクティビティとサービスはContext
クラスを拡張します。
Contextは、Android.content.Contextクラスのインスタンスで、アプリケーションを実行するAndroidシステムへの接続を提供します。たとえば、現在のデバイスの表示サイズをContextで確認できます。
それはまたプロジェクトの資源へのアクセスを与えます。これはアプリケーション環境に関するグローバル情報へのインターフェースです。
Contextクラスは、Androidサービス、例えばアラームマネージャなどにアクセスして時間ベースのイベントをトリガーすることもできます。
アクティビティとサービスはContextクラスを拡張します。したがって、それらはコンテキストにアクセスするために直接使用することができます。
コンテキスト は、アプリケーション環境に関するグローバル情報へのインタフェースです。その実装がAndroid
システムによって提供される抽象クラスです。
Context
を使用すると、アプリケーション固有のリソースやクラスにアクセスできるだけでなく、launching activities, broadcasting and receiving intents, etc.
などのアプリケーションレベルの操作を呼び出すこともできます。
これが例です
public class MyActivity extends Activity {
public void Testing() {
Context actContext = this; /*returns the Activity Context since Activity extends Context.*/
Context appContext = getApplicationContext(); /*returns the context of the single, global Application object of the current process. */
Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
Context BtnContext = BtnShowAct1.getContext(); /*returns the context of the View. */
詳細については/を訪問することができます http://developer.Android.com/reference/Android/content/Context.html
コンテキストは、アプリケーション/オブジェクトの現在の状態のコンテキストです。さまざまな環境データを表すエンティティです。コンテキストは、ローカルファイル、データベース、環境に関連するクラスローダー、システムレベルのサービスを含むサービスなど、現在のアクティビティが外部のAndroid環境と対話するのに役立ちます。
コンテキストはシステムへのハンドルです。リソースの解決、データベースや設定へのアクセスの取得などのサービスを提供します。 Androidアプリにはアクティビティがあります。アプリケーションが現在実行されている環境へのハンドルのようなものです。activityオブジェクトはContextオブジェクトを継承します。
あなたがコンテキストを取得することができますそれによって異なる呼び出しメソッド1。
コンテキストは基本的にリソースアクセス用で、アプリケーションの環境詳細(アプリケーションコンテキスト用)またはアクティビティ(アクティビティコンテキスト用)などを取得するためのものです。
メモリリークを回避するためには、コンテキストオブジェクトを必要とするすべてのコンポーネントに対してアプリケーションコンテキストを使用する必要があります。..more click here
Contextの専門性について深く掘り下げる前に、小さな類推をしてみましょう。
すべての上司には、それほど重要ではなく時間のかかる作業をするアシスタントまたは誰か(使い用の男の子)がいます。たとえば、ファイルやコーヒーが必要な場合は、アシスタントが実行されます。ボスはバックグラウンドで何が起こっているのかわかりませんが、ファイルまたはタスクは配信されます
だからここ
Boss - Android用アプリケーション
アシスタント - コンテキスト
やすりまたはコーヒー1杯 - リソース
コンテキストはあなたのアクセスポイントです アプリケーション関連のリソースの場合
そのようなリソースやタスクのいくつかを見てみましょう
活動を開始します。
ファイルシステム上のアプリケーション固有のキャッシュディレクトリへの絶対パスを取得します。
システムで実行されている特定のプロセスおよびユーザーIDに対して、与えられた許可が許可されているかどうかを判別します。
特定の許可が与えられているかどうかを確認します。
等々。
したがって、Androidアプリケーションがアクティビティを開始したい場合、それはContext
(Access Point)に直接進み、Context
クラスは彼にリソースを返します(この場合はIntent)。
他のクラスのようにContext
クラスもフィールドとメソッドを持ちます。
公式文書でContext
についてさらに詳しく調べることができます。それは、ほとんどすべて、利用可能なメソッド、フィールド、そしてフィールドをメソッドで使用する方法さえもカバーしています。
Context
は、私たちのほとんどが Application と呼ぶものです。それはAndroidシステムによって作られており、アプリケーションができることしかできません。 Tomcatでは、コンテキストも私がアプリケーションと呼ぶものです。
多くのアクティビティを保持するコンテキストが1つあり、各アクティビティには多くのビューがあります。
当然のことながら、これは適切ではないと言う人もいるでしょうし、それらはおそらく正しいですが、Contextがあなたの現在のアプリケーションであると言うことは、あなたがメソッドパラメータに何を入れているのか理解するのに役立ちます。
コンテキストとは、Androidがどのアクティビティに参加したり行動したりする必要があるかをAndroidが知ることを意味します。
1 - これで使ったToast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show();
。 Context context = ActivityName.this;
2 -startActivity(new Intent(context,LoginActivity.class));
この文脈では、どの活動から他の活動に行きたいかを意味します。 contextまたはActivityName.thisの方がgetContextおよびgetApplicatinContextよりも高速です。
Android.content.Contextクラスのインスタンスは、アプリケーションを実行するAndroidシステムへの接続を提供します。たとえば、現在のデバイスの表示サイズをContextで確認できます。
それはまたプロジェクトの資源へのアクセスを与えます。これはアプリケーション環境に関するグローバル情報へのインターフェースです。
Contextクラスは、Androidサービス、例えばアラームマネージャなどにアクセスして時間ベースのイベントをトリガーすることもできます。
アクティビティとサービスはContextクラスを拡張します。したがって、それらはコンテキストにアクセスするために直接使用することができます。
簡単に言うと、AndroidのContext
は、心配するのをやめるまでは気に入らない混乱です。
AndroidのContext
sは以下のとおりです。
神オブジェクト.
Android用の開発を始めているときは、すべてのアプリケーションを迂回したいが、プログラミング、テスト、およびAndroid自体に少し近づくと、それを避けることができます。
不明瞭な依存関係.
メモリリークの一般的な原因.
テスト用のPITA.
許可、リソース、設定、サービス、ブロードキャスト、スタイル、ダイアログの表示、およびレイアウトの拡張を行うためにAndroidシステムで使用される実際のコンテキスト。そして、いくつかの別々のことのために異なるContext
インスタンスが必要です(明らかに、あなたはアプリケーションまたはサービスコンテキストからダイアログを表示することはできません;アプリケーションとアクティビティコンテキストから広げられたレイアウトは異なるかもしれません)。
コンテキストは、リソース、データベース、プライベートファイルディレクトリ、設定、設定などにアクセスするためのプライベートデータを提供する、各app-s Sandbox へのAndroid固有のAPIです。
私用データの大部分は、1つのアプリケーションのすべての活動/サービス/放送リスナに対して同じである。
Application、Activity、ServiceはContextインタフェースを実装しているため、API呼び出しにContextパラメータが必要な場合に使用できます。
Context をAndroidの他のよく知られたクラスと接続する場合は、次の構造に留意してください。
Context <ContextWrapper <アプリケーション
Context <ContextWrapper <ContextThemeWrapper <Activity
Context <ContextWrapper <ContextThemeWrapper <Activity <ListActivity
Context <ContextWrapper <サービス
Context <ContextWrapper <Service <IntentService
したがって、これらのクラスはすべて独自の方法でコンテキストです。必要に応じて、 Service および ListActivity を Context にキャストできます。しかしよく見ると、クラスの中にはテーマも継承しているものがあります。アクティビティやフラグメントでは、テーマ設定を自分のビューに適用したいのですが、たとえば Service classについては気にしないでください。
文脈の違いを説明します ここ 。
Context
は、さまざまな期間におけるコンポーネント(またはアプリケーション)を意味します。午後1時から午後2時の間に非常に多くの食べ物を食べるのであれば、そのときの私のコンテキストは、そのときに使っているすべての方法(またはリソース)にアクセスするために使われます。コンテンツは特定の期間のコンポーネント(アプリケーション)です。アプリケーションのコンポーネントのContext
は、コンポーネントまたはアプリケーションの基礎となるライフサイクルに基づいて変化し続けます。たとえば、Activity
のonCreate()の中では、
getBaseContext()
- activityのコンストラクタによって設定(作成)されたcontext
のActivity
を返します。 getApplicationContext()
- アプリケーションの作成中にContext
setup(created)を提供します。
注:<application>
はすべてのAndroidコンポーネントを保持しています。
<application>
<activity> .. </activity>
<service> .. </service>
<receiver> .. </receiver>
<provider> .. </provider>
</application>
つまり、どのコンポーネント内からでもgetApplicationContext()
を呼び出すときは、アプリケーション全体の共通のコンテキストを呼び出しているということです。
Context
は、コンポーネントのライフサイクルに基づいてシステムによって変更され続けます。