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


回答:


1507

簡単に言えば:

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

あなたが呼び出すことによってコンテキストを取得することができgetApplicationContext()getContext()getBaseContext()またはthis(ときから拡張するクラスではContext、このようなアプリケーション、活動、サービスとIntentServiceクラスとして)。

コンテキストの一般的な用途:

  • 新しいオブジェクトの作成:新しいビュー、アダプター、リスナーの作成:

    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, ...);

51
あなたの例ではcontext.getSystemService(LAYOUT_INFLATER_SERVICE)、どこでどのようにcontext定義されていますか?
Dennis

8
テキストビューを動的に作成するときにコンテキストが必要な理由はよく説明されています。しかし、テキストビューの配列を動的に作成する一方で、コンテキストについて言及する必要はありません。どうしてこんなことに ?TextView [] textview = new TextView [10];
Abhinav Arora 2014

38
@AbhinavAroraは、配列を定義するときに、実際にテキストビューのインスタンスを構築するわけではありません(基本的に、ビューが入るためのスペースを作成するだけです)。その配列に値を入力する時点で、事前に作成されたTextViewが必要になるか、それらを作成できるようにするためのコンテキストが必要になります。
mc1arke 2015年

24
ビューにコンテキストが必要なのはなぜですか?たとえば、コンテキストがない場合、TextViewは何ができませんか?
恐竜

15
「コンテキスト」のないコードは、JVMを搭載した各オペレーティングシステムで実行できます。ただし、コンテキストがある場合は、Androidで実行する必要があります。Android固有の機能(デバイスの場所へのアクセス、写真の撮影、バックグラウンドサービスの実行など)を使用する場合は、コンテキストが必要ですが、 httpリクエスト。コンテキストは、JavaとAndroid間のブリッジと見なすことができます。
Faruk Toptas

508

コンテキストの定義

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

より単純な用語(例1)

  • Person-Xが新興のソフトウェア会社のCEOであると考えてください。

  • 会社には主任アーキテクトが存在し、この主任アーキテクトは、データベース、UIなど、会社に関わるすべての作業を行います。

  • 現在、CEOは新しい開発者を採用しています。

  • データベースまたはUIなどで作業するかどうかについて、新規採用者のスキルに基づいて新規採用者の責任を伝えるのはアーキテクトです。

より単純な用語(例2)

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

  • ホテルに行ったときと同じように、朝食、昼食、夕食を適当なタイミングで食べたいですね。

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

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

  • ここで、ルームサービス担当者は、あなたが単一のアクティビティであり、ホテルがアプリになることを考慮したコンテキストです。最終的に、朝食、ランチ、ディナーをリソースにする必要があります。


コンテキストに関連するものは次のとおりです。

  1. リソースを読み込んでいます。
  2. 新しい活動を開始します。
  3. ビューを作成します。
  4. システムサービスの取得。

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

これを説明する別の方法:テレビのテレビとチャンネルのリモートがリソース、サービス、インテントの使用などであるため、コンテキストを検討します---ここでリモートは、すべての異なるリソースへのアクセスをフォアグラウンドに取得するアクセスとして機能します。

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

  • 同様に...リモートにアクセスできる人は誰でも、当然、リソース、サービス、インテントの使用など、すべてのものにアクセスできます。


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

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

例:

TextView tv = new TextView(this);

キーワードthisは、現在のアクティビティのコンテキストを指します。


3
OK、アクティビティから派生したクラスはコンテキストそのものです。これが、新しく作成されたビューに渡すことで、コンテキストを渡す理由です。
0leg

7
非常に多くの異なる場所からコンテキストにアクセスできるようにするのは、良い設計上の決定でしょうか。私の意見では、アプリケーションの静的getContext()は1つあれば十分でしょう。
Trilarion、2015

@Trilarion ...それはあなたがコンテキストを使用する方法によって異なりgetApplicationContext()getContext()getBaseContext().....これを参照してください- >(stackoverflow.com/a/10641257
Devrath

テキストビューを作成して最後の部分を拡張するだけの場合:を呼び出す必要がある場合がありますSomeActivityName.this。インスタンスのthisスレッドでは、アクティビティではなくスレッドを指します
Zoe

1
コンテキストオブジェクトはAPKまたはAndroid OSで一意ですか?アプリケーションは2つの異なるコンテキストを持つことができますか?
バリホン2018

367

ソース


Androidのコンテキストのトピックは、多くの人を混乱させているようです。Androidで基本的なことを行うにはコンテキストが必要になることがよくあります。コンテキストを必要とする操作を実行しようとし、適切なコンテキストを「取得」する方法がわからないため、パニックになる場合があります。Androidのコンテキストの概念をわかりやすく説明しようと思います。問題の完全な扱いはこの投稿の範囲を超えていますが、コンテキストが何であり、どのように使用するかを理解できるように、一般的な概要を説明します。コンテキストとは何かを理解するために、ソースコードを見てみましょう。

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

コンテキストとは正確には何ですか?

まあ、ドキュメント自体はかなり簡単な説明を提供します:Contextクラスは「アプリケーション環境に関するグローバル情報へのインターフェース」です。

Contextクラス自体は抽象クラスとして宣言され、その実装はAndroid OSによって提供されます。ドキュメンテーションはさらに、「…アプリケーション固有のリソースとクラスへのアクセス、および起動アクティビティ、ブロードキャストとインテントの受信などのアプリケーションレベルの操作の呼び出しを許可する」というコンテキストを提供します。

名前がコンテキストである理由がよくわかります。それはそれだけだからです。コンテキストは、必要に応じて、アクティビティ、サービス、またはその他のコンポーネントのリンクまたはフックを提供し、それによってシステムにリンクして、グローバルアプリケーション環境へのアクセスを可能にします。言い換えると、コンテキストは、「アプリに関して一般的にどこにいるのか、アプリの他の部分にどのようにアクセス/通信するのか」というコンポーネントの質問に対する答えを提供します。これらすべてが少しわかりにくいと思われる場合は、Contextクラスによって公開されているメソッドをざっと見てみると、その真の性質についての手がかりがいくつか得られます。

これらのメソッドのランダムサンプリングは次のとおりです。

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

これらすべての方法に共通するものは何ですか?これらはすべて、コンテキストへのアクセス権を持つすべてのユーザーがアプリケーション全体のリソースにアクセスできるようにします。

つまり、コンテキストは、それへの参照を持つコンポーネントを、残りのアプリケーション環境にフックします。たとえば、アセット(プロジェクトの '/ assets'フォルダーと考えます)は、アクティビティ、サービス、またはそれらのリソースへのアクセス方法を知っているものであれば、アプリケーション全体で利用できます。同じことが、リソースにフックするgetResources()ようなことを可能にしgetResources().getColor()ますcolors.xml(aaptがJavaコードを介してリソースへのアクセスを可能にすることは、別の問題です)。

その結果Context、システムリソースへのアクセスが可能になり、コンポーネントが「大きなアプリ」にフックされます。Context抽象Contextクラスの実装を提供するクラスであるのサブクラスを見てみましょう。最も明白なクラスは、Activityクラスです。Activity継承from ContextThemeWrapper、継承、、それ自体ContextWrapperから継承されContextます。これらのクラスは、より深いレベルで物事を理解するために見るのに役立ちますが、今のところそれを知ることで十分でContextThemeWrapperありContextWrapper、ほとんどのように聞こえます。これらのクラスは、Contextコンテキスト(実際のコンテキスト)を「ラップ」し、それらの関数をそのコンテキストに委譲することにより、クラス自体を作成します。ContextWrapperこのクラスは、抽象メソッドgetAssetsからContext次のようにクラスが実装されています。

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBaseコンストラクタによって特定のコンテキストに設定される単なるフィールドです。したがって、コンテキストがラップContextWrapperされ、getAssetsメソッドの実装がそのコンテキストに委譲されます。Activity最終的に継承するクラスを調べて、Contextすべてがどのように機能するかを見てみましょう。

あなたはおそらくアクティビティが何であるかを知っていますが、確認する必要があります-それは基本的に「ユーザーが実行できる単一のことです。ユーザーが操作するUIを配置するウィンドウを提供します。他のAPIに精通している開発者や、開発者以外の開発者でも、それを「スクリーン」と呼んでいるかもしれません。これは技術的に不正確ですが、私たちの目的には関係ありません。それでは、どのようにしActivityContext相互作用し、彼らの継承関係はどのようになっているのでしょうか?

繰り返しになりますが、特定の例を見ると役に立ちます。私たちは皆、アクティビティを起動する方法を知っています。アクティビティを開始する「コンテキスト」がある場合、を呼び出すだけstartActivity(intent)で、インテントは、アクティビティを開始するコンテキストと開始するアクティビティを記述します。これはおなじみstartActivity(this, SomeOtherActivity.class)です。

そして、何thisですか?クラスはから継承しているthisため、アクティビティです。完全なスクープは次のとおりです。を呼び出すと、最終的にクラスは次のようなものを実行します。ActivityContextstartActivityActivity

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

そのためexecStartActivityInstrumentationクラスから(実際には、Instrumentation呼び出されたの内部クラスからActivityResult)を利用します。

この時点で、システムの内部をのぞき始めています。

これは、OSが実際にすべてを処理する場所です。では、インストルメンテーションはどのようにしてアクティビティを正確に開始するのでしょうか。さて、上記thisexecStartActivityメソッドのパラメータはあなたのアクティビティ、つまりコンテキストであり、execStartActivityはこのコンテキストを利用します。

30,000の概要は次のとおりです。Instrumentationクラスは、作業を行うために監視しているアクティビティのリストを追跡します。このリストは、すべてのアクティビティを調整し、アクティビティのフローの管理ですべてがスムーズに実行されるようにするために使用されます。

スレッドとプロセスの問題を調整するために、まだ十分に検討していないいくつかの操作があります。最終的に、ActivityResultはネイティブオペレーションActivityManagerNative.getDefault().startActivity()を使用Contextします。これは、を呼び出したときに渡されたを使用しますstartActivity。渡されたコンテキストは、必要に応じて「インテント解決」を支援するために使用されます。インテント解決とは、インテントが提供されない場合に、システムがインテントのターゲットを決定できるプロセスです。(詳細については、こちらのガイドをご覧ください)。

Androidがこれを行うには、によって提供される情報にアクセスする必要がありますContext。具体的には、システムがにアクセスする必要があるContentResolverため、「インテントのデータのMIMEタイプを判別」できます。startActivityコンテキストをどのように利用するかについてのこの全体的な説明は少し複雑であり、私自身は内部を完全に理解していません。私の主なポイントアプリに不可欠な多くの操作を実行するためにアプリケーション全体のリソースにアクセスする方法を説明するためだけのContextものでした。これが、これらのリソースへのアクセスを提供するものです。より簡単な例はビューです。カスタムビューを拡張する RelativeLayoutか、他のViewクラスを使用する場合は、Context引数として。カスタムビューをインスタンス化するときは、コンテキストで渡します。どうして?ビューは、テーマ、リソース、およびその他のビュー構成の詳細にアクセスできる必要があるためです。ビューの構成は実際には良い例です。各コンテキストにはContext、ディスプレイのサイズや密度などのためにOS自体によって設定されるさまざまなパラメーター(の実装のフィールド)があります。この情報がビューの設定などに重要である理由は簡単にわかります。

最後に一言: Androidに関しては、何らかの理由でAndroidを初めて使う人(そしてそれほど新しくない人でも)はオブジェクト指向プログラミングを完全に忘れているようです。何らかの理由で、人々はAndroid開発を先入観のパラダイムや学習した行動に曲げようとします。

Androidには独自のパラダイムがあり、特定のパターンがあります。これは、先入観の概念を手放し、単にドキュメントと開発ガイドを読んだだけでも、実際には非常に一貫しています。しかし、私の本当のポイントは、「適切なコンテキストを取得する」のは難しい場合がありますが、コンテキストを必要とする状況に遭遇し、コンテキストがないと考えると、人々は不当にパニックになります。ここでも、Javaは継承設計を備えたオブジェクト指向言語です。

アクティビティ自体はコンテキストから継承するため、アクティビティ内にコンテキストを「持つ」だけです。それには魔法はありません(OSがさまざまなパラメーターを設定し、コンテキストを正しく「構成する」ためにOSが単独で行うことを除いて)。したがって、メモリ/パフォーマンスの問題を別にして(たとえば、必要がないときにコンテキストへの参照を保持したり、メモリに悪影響を与えるような方法で実行したり)、コンテキストは他のオブジェクトと同じようにオブジェクトであり、渡すことができます。他のPOJO(Plain Old Java Object)と同じです。場合によっては、そのコンテキストを取得するために賢いことをする必要があるかもしれませんが、Object以外のものから拡張された通常のJavaクラスは、コンテキストにアクセスできる方法で作成できます。コンテキストを取得するパブリックメソッドを公開し、必要に応じてそのクラスで使用するだけです。


33
これは素晴らしい答えです。誰もが直感的に知っていることだけを伝える、受け入れられているものよりもはるかに優れています。
Honza Kalfus 2017

5
これはあなたが探している長い答えです!よく説明
Nick Jian

4
素晴らしいans!マジで!
zeekhuge 2017年

3
うーん、私には、古いタイマーがグローバル変数を呼び出すために使用していたもののように聞こえます。これは、オブジェクト指向がシーンに入ったときにかなり嫌われていました8
Ulf Edholm

したがって、getApplicationContextから取得したコンテキストは、アクティビティのgetContextと同じですか?
JPM

120

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

詳細については、Android Studioを使用したAndroid開発の概要-チュートリアルをご覧ください。


89

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

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

次の図Contextは、クラスの階層を示しています。は、この階層のルートクラスです。特に、それActivityがの子孫であることを強調する価値がありContextます。

アクティビティ図


この写真はどのように生成されましたか?
d0ye

70

Contextを正確に?

Androidリファレンスドキュメントによると、これはさまざまな環境データを表すエンティティです。ローカルファイル、データベース、環境に関連付けられたクラスローダー、サービス(システムレベルのサービスを含む)などへのアクセスを提供します。この本全体を通して、またAndroidを使用した日常のコーディングでは、コンテキストが頻繁に渡されることがわかります。

Androidの実際」の本、p。60。

いくつかのAndroid APIには、 Context asパラメータが

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


52

理解する簡単な例 contextandroidで:

すべての上司には、面倒を見て、それほど重要ではなく時間のかかるタスクをすべて実行するアシスタントがいます。ファイルまたは一杯のコーヒーが必要な場合は、アシスタントが実行します。何人かのボスはオフィスで何が起こっているのかほとんど知らないので、彼らもアシスタントについてこれについて尋ねます。自分で仕事をする人もいますが、他のほとんどの場合、アシスタントの助けが必要です。

このシナリオでは、

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

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

ファイル/コーヒーカップ–リソースです

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

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

  • 共通リソースの読み込み
  • 動的ビューの作成
  • トーストメッセージの表示
  • 打ち上げ活動など

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

getContext()

getBaseContext()

getApplicationContext()

this

47

Android コンテキストインターフェースです(Javaの意味ではなく、一般的な意味で。Javaでは、Contextアプリケーション固有のリソースとクラス、およびアプリケーション環境に関する情報へのアクセスを可能に実際には抽象クラスです)。

AndroidアプリがWebアプリの場合、コンテキストは次のようになります。 ServletContext(ここでは正確な比較は行いません)。

アクティビティとサービスも拡張されるContextため、これらのメソッドをすべて継承して、アプリが実行されている環境情報にアクセスします。


35
  • Context 環境データを取得するためのハンドルを表します。
  • Context クラス自体は抽象として宣言され、その実装はAndroid OSによって提供されます。
  • Context テレビのリモコンのようなもので、テレビのチャンネルはリソースやサービスなどです。 ここに画像の説明を入力してください

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

  • リソースを読み込んでいます。
  • 新しい活動を開始します。
  • ビューを作成します。
  • システムサービスを取得しています。

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

  • getApplicationContext()
  • getContext()
  • getBaseContext()ここに画像の説明を入力してくださいここに画像の説明を入力してください

18

初心者のためにそこに置くだけです。

だから最初に単語のコンテキストを理解する

english-libで。その意味は:

「イベント、ステートメント、またはアイデアの設定を形成する状況、およびそれを完全に理解し、評価することができるという点で。」

「書かれた、または話された、単語またはパッセージの直前および直後にあり、その意味を明確にする部分。」

同じ理解をプログラミングの世界に取り入れましょう。

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

getApplicationContext()getContext(), getBaseContext()またはthis(アクティビティクラス内の場合)を呼び出すことで、コンテキストを取得できます。

アプリケーションのどこでもコンテキストを取得するには、次のコードを使用します。

AppContextAndroidアプリケーション内に新しいクラスを作成する

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

これで、非アクティビティクラスでアプリケーションコンテキストが必要になったときに、このメソッドを呼び出すと、アプリケーションコンテキストが作成されます。

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


17

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


17

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


13

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

コンテキストは、位置情報サービスなどのAndroidサービスへのアクセスも提供します。

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


9

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

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

Contextクラスは、時間ベースのイベントをトリガーするアラームマネージャーなどのAndroidサービスへのアクセスも提供します。

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


9

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

コンテキストは基本的にリソースアクセス用であり、アプリケーション(アプリケーションコンテキストの場合)またはアクティビティ(アクティビティコンテキストの場合)またはその他の環境の詳細を取得します。

回避メモリために、より多くのクリックのためにあなたが....コンテキストオブジェクトを必要とするすべてのコンポーネントのためのアプリケーション・コンテキストを使用する必要があります漏れるこちら


8

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

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

コンテキストを取得できるさまざまな呼び出しメソッド1. getApplicationContext()、2。getContext()、3。getBaseContext()4.またはこれ(アクティビティクラス内の場合)。


7

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


6

A Contextは、ほとんどの人がApplicationと呼ぶものです。これはAndroidシステムによって作成され、アプリケーションが実行できることだけを実行できます。Tomcatでは、コンテキストは私がアプリケーションと呼ぶものでもあります。

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

明らかに、これまたはそれが原因で適合しないと言う人もいますが、おそらく正しいのですが、コンテキストが現在のアプリケーションであると言うと、メソッドのパラメーターに何を入れているかを理解するのに役立ちます。


6

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

コンテキストの専門性を深く掘り下げる前に、小さな類似点を見てみましょう

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

So Here
Boss-Android Application
Assistant-コンテキスト
ファイルまたは一杯のコーヒー-リソース

Android開発者の公式サイトがコンテキストについて述べていること

コンテキストは、アプリケーション関連リソースへのアクセスポイントです

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

  • アクティビティを開始します。

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

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

  • 特定の権限が付与されているかどうかを確認します。

等々。
したがって、Androidアプリケーションがアクティビティを開始したい場合は、直接Context(アクセスポイント)に移動し、Contextクラスは彼にリソース(この場合はインテント)を返します。

他のクラスと同様に、Contextクラスにもフィールドとメソッドがあります。
詳細についてContextは公式ドキュメントをご覧ください。ほとんどすべて、使用可能なメソッド、フィールド、さらにメソッドでフィールドを使用する方法までカバーしています。


@dhssaに感謝します。私はAndroidのドキュメントの要点を提供しようとしていました..ショウルはより注意深くなっています。「コピーされた」部分を削除
Rohit Singh

5

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

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

Contextクラスは、時間ベースのイベントをトリガーするアラームマネージャーなどのAndroidサービスへのアクセスも提供します。

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


4

ContextをAndroidの他の使い慣れたクラスに接続する場合は、次の構造に注意してください。

コンテキスト<ContextWrapper <アプリケーション

Context <ContextWrapper <ContextThemeWrapper <アクティビティ

コンテキスト<ContextWrapper <ContextThemeWrapper <アクティビティ<ListActivity

コンテキスト<ContextWrapper <サービス

コンテキスト<ContextWrapper <サービス<IntentService

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

ここではコンテキストの違いについて説明します


4

簡単にContext言えば、Android はごちゃごちゃしているので、心配する必要がなくなります。

Android Contextは次のとおりです。

  • 神オブジェクト。

  • Android向けの開発を開始するときにすべてのアプリケーションを通過させたいが、プログラミング、テスト、Android自体に少し近づくとそうしないこと。

    • 不明確な依存関係。

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

    • テスト用のPITA。

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


4

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

privatedataのほとんどは、1つのアプリケーションのすべてのアクティビティ/サービス/ブロードキャストリスナーで同じです。

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


4

Contextさまざまな期間におけるコンポーネント(またはアプリケーション)を意味します。午後1時から2時の間にたくさんの食べ物を食べる場合、その時間のコンテキストを使用して、その時間中に使用するすべてのメソッド(またはリソース)にアクセスします。コンテンツは特定の時間のコンポーネント(アプリケーション)です。Contextアプリケーションのコンポーネントの数は、コンポーネントまたはアプリケーションの根本的なライフサイクルに基づいて変化し続けます。たとえば、のonCreate()内ではActivity

getBaseContext()-与えるcontextActivity活性のコンストラクタによって設定(作成)されます。 getApplicationContext()- Contextアプリケーションの作成中にセットアップ(作成)を行います。

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

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

    <service>  .. </service>

    <receiver> .. </receiver>

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

つまり、getApplicationContext()コンポーネントの内部から呼び出す場合、アプリケーション全体の共通のコンテキストを呼び出していることになります。

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


1

コンテキストは、文字列、色、フォントなど、さまざまなリソースを持つボックスと考えてください。リソースが必要な場合は、このボックスを使用します。画面を回転すると、向きが横向きに変わるため、このボックスが変わります。


0

 Context現在を意味します。 Context現在の画面の操作に使用します。例:
  1. getApplicationContext()
  2. getContext()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();


-7

Javaでは、このキーワードはアプリケーションの現在のオブジェクトの状態を指すと言います。
同様に、ContextAndroid開発の別の方法もあります。

これは明示的または暗黙的に定義できます。

Context con = this;

getApplicationContext();

getBaseContext();

getContext();

私が思う現在の活動の対象にすぎないのかもしれません。まるでこのように数回使っています。
Ohiovr 2016

1
コンテキストを取得するには、さまざまな方法があります。通話thisはアクティビティでのみ機能します。コンテキストは「これ」に代わるものではありません-コンテキストはシステム機能へのアクセスに使用されます。あなたはコンテキストを単純化しすぎており、それに関する主要なポイントを見逃しています。
ゾーイ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.