web-dev-qa-db-ja.com

Android Intent Context Confusing

誰かが私にこれを説明できますか:

Intent intent = new Intent(Context, AlarmReceiver.class);

私は理解していなかったし、誰かがこれを私に詳細に説明しようとしないなら、私は決してそうは思わないと思う。このコンテキスト全体のことは、私にとってとても混乱しています。時には次のように動作します:

Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);

時にはそれはそのように動作しませんが、それだけを受け入れます:

    Intent intent = new Intent(context, AlarmReceiver.class);

時々その:

Intent intent = new Intent(this, AlarmReceiver.class);

などなどと他の多く。

コンテキストの基本は理解していますが、いくつありますか?そして、なぜEclipseは私にエラーを一度投げるのですか?なぜコンテキストを宣言する必要があるのですか? :

Context context;

すべての状況で適切なコンテキストを見つけることができません。どのような状況でどのような状況が適切かを知るにはどうすればよいですか?

52
user1880779

まず、 コンテキスト の方が少し優れていることを説明してから、それがどのように使用および受信されるかを説明します。基本的に、コンテキストは、リソースをプログラムにリンクするための参照です。各オブジェクトには、そのオブジェクトの設定に必要なリソースを含む独自のコンテキストが与えられます。他の目的の中でも、多くのオブジェクトを作成し、プログラム識別情報を取得する必要があります。これにより、新しいビューとアクティビティを設定することが非常に重要になりますが、他の目的にも使用できます。詳細については this answer も参照してください。

アイテムのコンテキストは、さまざまな場所から取得できます。格納されて取得する必要がある場合もあれば、継承される場合もあります。基本的に、これはオブジェクト指向プログラミングです。

いくつか例を示します。

アクティビティ コンテキストを継承します。したがって、アクティビティに参加している場合は、コンテキストを使用するために自分自身を渡すだけで済みます。また、getBaseContext()へのポインターも含まれています。アプリケーションコンテキスト全体が必要な場合は、それを参照する必要がある場合がありますが、ほとんどの場合はしばらくは使用しないでしょう。

View はコンテキストを継承しません。ただし、メソッド getContext() があります。ビューからコンテキストを取得する必要がある場合、これがそれを取得する方法です。このコンテキストは完全ではなく、ビューのコンテンツのコンテキストのみを持ちます。

フラグメント もコンテキストを継承しません。これらにはメソッド getActivity() が含まれています。これは、フラグメントがアクティブな場合、フラグメントのコンテキストであるアクティビティを返します。

BroadcastReceivers コンテキストも継承しません。実際、これらにはコンテキストがまったく含まれていませんが、イベントの受信時に単に現在のコンテキストを受信します( onReceive(Context context、Intent intent) など)

63
PearsonArtPhoto

コンテキスト機能

特定のContextオブジェクトで安全に実行できる一般的なアクションは、元の場所によって異なります。以下は、アプリケーションがコンテキストを受け取る一般的な場所と、それぞれの場合に役立つものの表です。

enter image description here

  1. アプリケーションはここからアクティビティを開始できますが、新しいタスクを作成する必要があります。これは特定のユースケースに適合する可能性がありますが、アプリケーションに非標準のバックスタック動作を作成する可能性があり、一般的に推奨されないか、推奨されるプラクティスではありません。
  2. これは合法ですが、インフレーションは、アプリケーションで定義されているものではなく、実行しているシステムのデフォルトテーマで行われます。
  3. Android 4.2以降で、スティッキブロードキャストの現在の値を取得するために使用される受信者がnullの場合に許可されます。

元の記事 こちら

9
Cheese Bread

コンテキストによって理解できるのは環境です。簡単に言えば、コンテキストとは、あらゆるものの周囲です。したがって、コンテキストの形式を使用する場合、コンテキストを使用する対象の周囲はどうあるべきかを決定する必要があります。

たとえば、一部のデータまたはフィールドをアプリケーション全体に残したい場合は、アプリケーションクラスで定義する必要があります。

これで、アプリケーションのコンポーネントのいずれかでアプリケーションコンテキストを取得すると、アプリケーションクラスで宣言したこのフィールドがコンテキストになります。したがって、アクセスできます。

同じことがすべてのコンテキストタイプに当てはまります。

コンテキスト「this」を使用してサービスコンポーネントでalertDialogを使用する場合、「this」を使用するとサービスの環境を表すため、必ず例外が発生します。バックグラウンドコンポーネントであるため、その中にウィンドウを追加します。そのため、不良トークンの例外を通知します。これは、周囲のビュー用に生成されたトークンがalertDialogの表示に適切でないことを意味します。

これで何が欲しいのかが簡単にわかると思います。

5
kaushal trivedi