web-dev-qa-db-ja.com

Androidの「コンテキスト」とは何ですか?

Androidプログラミングでは、Contextクラスとは何ですか?またそれは何のために使用されますか?

開発者サイト で読みましたが、はっきり理解できません。

1760
Brigadier

簡単に言えば:

名前が示すように、それはアプリケーション/オブジェクトの現在の状態のコンテキストです。それは新しく作成されたオブジェクトに何が起こっているのかを理解させます。通常、あなたはあなたのプログラムの他の部分(アクティビティとパッケージ/アプリケーション)に関する情報を得るためにそれを呼び出します。

コンテキストを取得するには、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, ...);
    
1371
Sameer Segal

コンテキストの定義

  • コンテキストは環境データを表します
  • データベースなどへのアクセスを提供します

簡単な用語(例1)

  • Person-Xがスタートアップソフトウェア会社のCEOであるとします。

  • 会社にはリードアーキテクトがいます。このリードアーキテクトは、データベース、UIなどを含む会社内のすべての作業を行います。

  • 今CEOは新しい開発者を雇います。

  • 彼がデータベースまたはUIなどのどちらで作業するかは、新人のスキルに基づいて新入社員の責任を伝えるのは建築家です。

簡単な用語(例2)

  • それはアプリのリソースへのAndroidのアクティビティのアクセスのようなものです。

  • それはあなたがホテルを訪れるとき、あなたが適切なタイミングで朝食、昼食、夕食を食べたい時に似ていますね。

  • あなたが滞在中に好きなことは他にもたくさんあります。どうやってこれらのことを手に入れますか?

  • あなたはルームサービスの人にあなたにこれらのものを持ってくるように頼みます。

  • ここでは、ルームサービス担当者が、あなたが単一の活動であり、ホテルがあなたのアプリであることを考えると、コンテキストになります。


コンテキストを含むものは以下のとおりです。

  1. リソースのロード中
  2. 新しいアクティビティの起動
  3. ビューの作成
  4. システムサービスの取得

コンテキストはActivityServiceApplicationなどの基本クラスです。

これを説明するもう1つの方法:テレビのリモコンとしてのコンテキストを考えるテレビのチャンネルはリソース、サービス、インテントなどを使用する - - - ここでremoteは、さまざまなリソースすべてにアクセスして前景にアクセスする

  • つまり、Remoteはインテントなどを使用して、リソース、サービスなどのチャネルにアクセスできます。

  • 同様に...リモートへのアクセス権を持っている人は、リソース、サービス、インテントの使用などのすべてのものにアクセスできます


あなたが文脈を得ることができる異なる方法

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • またはthis(アクティビティクラスの場合)

例:

TextView TV=new TextView(this);

this - >は現在のアクティビティのコンテキストを参照します。

460
Devrath

コンテキストはシステムへのハンドルです。リソースの解決、データベースや設定へのアクセスの取得などのサービスを提供します。 Androidアプリにはアクティビティがあります。コンテキストは、アプリケーションが現在実行されている環境へのハンドルのようなものです。アクティビティオブジェクトはコンテキストオブジェクトを継承します。

詳細については、Android StudioによるAndroid開発の概要 - チュートリアルを参照してください。

109
angryITguy

Contextは、アプリケーション環境に関するグローバル情報への「インターフェース」です。実際には、Contextは実際には 抽象クラス であり、その実装はAndroidシステムによって提供されます。

これにより、アプリケーション固有のリソースやクラスへのアクセス、およびアクティビティの起動、インテントのブロードキャストや受信などのアプリケーションレベルの操作の呼び出しが可能になります。

次の図では、クラスの階層がわかります。ここで、Contextはこの階層のルートクラスです。特に、ActivityContextの子孫であることを強調する価値があります。

Activity diagram

77
Dmytro Danylyk

Contextは正確に何ですか?

Androidのリファレンスドキュメントによると、これはさまざまな環境データを表すエンティティです。ローカルファイル、データベース、環境に関連するクラスローダー、サービス(システムレベルのサービスを含む)などへのアクセスを提供します。この本を通して、そしてあなたの日々のAndroidでのコーディングにおいて、あなたはContextが頻繁に回っていくのを見るでしょう。

" Android in Practice "の本、p。から。 60。

いくつかのAndroid APIはパラメータとしてContextを必要とします

さまざまなAndroid APIを調べてみると、それらの多くがAndroid.content.Contextオブジェクトをパラメーターとして使用していることがわかります。また、アクティビティやサービスは通常Contextとして使用されています。これらのクラスは両方ともContextから継承されるため、これは機能します。

63
s0ld13r

Androidの ContextInterface (一般的な意味では、Javaの意味ではありません。Javaでは、Contextは実際には抽象クラスです)で、アプリケーション固有のリソースおよびクラスとアプリケーションに関する情報にアクセスできます。環境。

あなたのAndroidアプリがWebアプリだった場合、あなたのコンテキストはServletContextのようなものになるでしょう(私はここで正確な比較をしていません)。

あなたの活動やサービスもContextを拡張しているので、それらはアプリが実行されている環境情報にアクセスするためにそれらすべてのメソッドを継承します。

43
naikus

Androidでcontextを理解するための簡単な例:

すべての上司には、それほど重要ではなく時間のかかる作業をすべて行うために、世話をするアシスタントがいます。ファイルやコーヒー1杯が必要な場合は、助手が走っています。何人かのボスはオフィスで何が起こっているのかほとんどわかっていないので、彼らはこれについてもアシスタントに尋ねます。彼らはいくつかの仕事を自分でやるが、他のほとんどのことのために彼らは彼らの助手の助けを必要とする。

このシナリオでは、

Boss - はAndroidアプリケーションです

アシスタント - コンテキストです

ファイル/コーヒー1杯 - リソース

アクティビティ、アプリケーションなど、アプリケーションのさまざまな部分に関する情報を取得する必要がある場合は、一般にコンテキストを呼び出します。

コンテキストが関係するいくつかの操作(アシスタントが必要とされるもの):

  • 共通リソースのロード
  • 動的ビューを作成する
  • Toastメッセージを表示する
  • 活動開始など.

コンテキストを取得するさまざまな方法

getContext()

getBaseContext()

getApplicationContext()

this
37
Parsania Hardik
  • Contextは、環境データを取得するためのハンドルを表します。
  • Contextクラス自体はabstractとして宣言され、その実装はAndroid OSによって提供されます。
  • Contextはテレビのリモコンのようなもので、テレビのチャンネルはリソース、サービスなどです。 enter image description here

あなたはそれで何ができますか?

  • リソースを読み込んでいます。
  • 新しい活動を始めます。
  • ビューを作成する.
  • システムサービスを受ける。

コンテキストを取得する方法:

  • getApplicationContext()
  • getContext()
  • getBaseContext()enter image description here enter image description here
23
user4813855

初心者のためにそれを出すだけです。

だから最初に単語の文脈を理解する:

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;
    }
}

非アクティビティクラスのアプリケーションコンテキストが欲しいときはいつでも、このメソッドを呼び出すだけでアプリケーションコンテキストができます。

この助けを願っています;)

16
star18bit

それを、アプリまたはサービスが実行されているプロセスを無効にしているVMと考えてください。サイロ化された環境は、基礎となるシステム情報と特定の許可されたリソースにアクセスできます。それらのサービスを利用するには、そのコンテキストが必要です。

15
Erol

コンテキストは現在のオブジェクトへの参照です。またコンテキストは、アプリケーション環境に関する情報へのアクセスを許可します。

15
devdas

クラスAndroid.content.Contextは、Androidシステムとプロジェクトのリソースへの接続を提供します。これはアプリケーション環境に関するグローバル情報へのインターフェースです。

ContextはAndroidサービスへのアクセスも提供します。ロケーションサービス.

アクティビティとサービスはContextクラスを拡張します。

12
Yashvir yadav

Contextは、Android.content.Contextクラスのインスタンスで、アプリケーションを実行するAndroidシステムへの接続を提供します。たとえば、現在のデバイスの表示サイズをContextで確認できます。

それはまたプロジェクトの資源へのアクセスを与えます。これはアプリケーション環境に関するグローバル情報へのインターフェースです。

Contextクラスは、Androidサービス、例えばアラームマネージャなどにアクセスして時間ベースのイベントをトリガーすることもできます。

アクティビティとサービスはContextクラスを拡張します。したがって、それらはコンテキストにアクセスするために直接使用することができます。

8
chandan kumar

コンテキスト は、アプリケーション環境に関するグローバル情報へのインタフェースです。その実装が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

8
IntelliJ Amiya

コンテキストは、アプリケーション/オブジェクトの現在の状態のコンテキストです。さまざまな環境データを表すエンティティです。コンテキストは、ローカルファイル、データベース、環境に関連するクラスローダー、システムレベルのサービスを含むサービスなど、現在のアクティビティが外部のAndroid環境と対話するのに役立ちます。

コンテキストはシステムへのハンドルです。リソースの解決、データベースや設定へのアクセスの取得などのサービスを提供します。 Androidアプリにはアクティビティがあります。アプリケーションが現在実行されている環境へのハンドルのようなものです。activityオブジェクトはContextオブジェクトを継承します。

あなたがコンテキストを取得することができますそれによって異なる呼び出しメソッド1。

7
santoshpatmca

コンテキストは基本的にリソースアクセス用で、アプリケーションの環境詳細(アプリケーションコンテキスト用)またはアクティビティ(アクティビティコンテキスト用)などを取得するためのものです。

メモリリークを回避するためには、コンテキストオブジェクトを必要とするすべてのコンポーネントに対してアプリケーションコンテキストを使用する必要があります。..more click here

7
Jaber Shabeek

ボスアシスタントアナロジー

Contextの専門性について深く掘り下げる前に、小さな類推をしてみましょう。

すべての上司には、それほど重要ではなく時間のかかる作業をするアシスタントまたは誰か(使い用の男の子)がいます。たとえば、ファイルやコーヒーが必要な場合は、アシスタントが実行されます。ボスはバックグラウンドで何が起こっているのかわかりませんが、ファイルまたはタスクは配信されます

だからここ
Boss - Android用アプリケーション
アシスタント - コンテキスト
やすりまたはコーヒー1杯 - リソース

公式Android開発者サイトが コンテキスト について何を言っているのか

コンテキストはあなたのアクセスポイントです アプリケーション関連のリソースの場合

そのようなリソースやタスクのいくつかを見てみましょう

  • 活動を開始します。

  • ファイルシステム上のアプリケーション固有のキャッシュディレクトリへの絶対パスを取得します。

  • システムで実行されている特定のプロセスおよびユーザーIDに対して、与えられた許可が許可されているかどうかを判別します。

  • 特定の許可が与えられているかどうかを確認します。

等々。
したがって、Androidアプリケーションがアクティビティを開始したい場合、それはContext(Access Point)に直接進み、Contextクラスは彼にリソースを返します(この場合はIntent)。

他のクラスのようにContextクラスもフィールドとメソッドを持ちます。
公式文書でContextについてさらに詳しく調べることができます。それは、ほとんどすべて、利用可能なメソッド、フィールド、そしてフィールドをメソッドで使用する方法さえもカバーしています。

5
Rohit Singh

Contextは、私たちのほとんどが Application と呼ぶものです。それはAndroidシステムによって作られており、アプリケーションができることしかできません。 Tomcatでは、コンテキストも私がアプリケーションと呼ぶものです。

多くのアクティビティを保持するコンテキストが1つあり、各アクティビティには多くのビューがあります。

当然のことながら、これは適切ではないと言う人もいるでしょうし、それらはおそらく正しいですが、Contextがあなたの現在のアプリケーションであると言うことは、あなたがメソッドパラメータに何を入れているのか理解するのに役立ちます。

5
Nicolas Zozol

コンテキストとは、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よりも高速です。

4
Deven Chavda

Android.content.Contextクラスのインスタンスは、アプリケーションを実行するAndroidシステムへの接続を提供します。たとえば、現在のデバイスの表示サイズをContextで確認できます。

それはまたプロジェクトの資源へのアクセスを与えます。これはアプリケーション環境に関するグローバル情報へのインターフェースです。

Contextクラスは、Androidサービス、例えばアラームマネージャなどにアクセスして時間ベースのイベントをトリガーすることもできます。

アクティビティとサービスはContextクラスを拡張します。したがって、それらはコンテキストにアクセスするために直接使用することができます。

4
Mubarak

簡単に言うと、AndroidのContextは、心配するのをやめるまでは気に入らない混乱です。

AndroidのContextsは以下のとおりです。

  • 神オブジェクト.

  • Android用の開発を始めているときは、すべてのアプリケーションを迂回したいが、プログラミング、テスト、およびAndroid自体に少し近づくと、それを避けることができます。

    • 不明瞭な依存関係.

    • メモリリークの一般的な原因.

    • テスト用のPITA.

  • 許可、リソース、設定、サービス、ブロードキャスト、スタイル、ダイアログの表示、およびレイアウトの拡張を行うためにAndroidシステムで使用される実際のコンテキスト。そして、いくつかの別々のことのために異なるContextインスタンスが必要です(明らかに、あなたはアプリケーションまたはサービスコンテキストからダイアログを表示することはできません;アプリケーションとアクティビティコンテキストから広げられたレイアウトは異なるかもしれません)。

2
Pavlus

コンテキストは、リソース、データベース、プライベートファイルディレクトリ、設定、設定などにアクセスするためのプライベートデータを提供する、各app-s Sandbox へのAndroid固有のAPIです。

私用データの大部分は、1つのアプリケーションのすべての活動/サービス/放送リスナに対して同じである。

Application、Activity、ServiceはContextインタフェースを実装しているため、API呼び出しにContextパラメータが必要な場合に使用できます。

2
k3b

Context をAndroidの他のよく知られたクラスと接続する場合は、次の構造に留意してください。

Context <ContextWrapper <アプリケーション

Context <ContextWrapper <ContextThemeWrapper <Activity

Context <ContextWrapper <ContextThemeWrapper <Activity <ListActivity

Context <ContextWrapper <サービス

Context <ContextWrapper <Service <IntentService

したがって、これらのクラスはすべて独自の方法でコンテキストです。必要に応じて、 Service および ListActivity Context にキャストできます。しかしよく見ると、クラスの中にはテーマも継承しているものがあります。アクティビティやフラグメントでは、テーマ設定を自分のビューに適用したいのですが、たとえば Service classについては気にしないでください。

文脈の違いを説明します ここ

2
lomza

Contextは、さまざまな期間におけるコンポーネント(またはアプリケーション)を意味します。午後1時から午後2時の間に非常に多くの食べ物を食べるのであれば、そのときの私のコンテキストは、そのときに使っているすべての方法(またはリソース)にアクセスするために使われます。コンテンツは特定の期間のコンポーネント(アプリケーション)です。アプリケーションのコンポーネントのContextは、コンポーネントまたはアプリケーションの基礎となるライフサイクルに基づいて変化し続けます。たとえば、ActivityのonCreate()の中では、

getBaseContext() - activityのコンストラクタによって設定(作成)されたcontextActivityを返します。 getApplicationContext() - アプリケーションの作成中にContext setup(created)を提供します。

注:<application>はすべてのAndroidコンポーネントを保持しています。

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

つまり、どのコンポーネント内からでもgetApplicationContext()を呼び出すときは、アプリケーション全体の共通のコンテキストを呼び出しているということです。

Contextは、コンポーネントのライフサイクルに基づいてシステムによって変更され続けます。

1
Uddhav Gautam