58

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

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

などなどなどと他の多く。

コンテキストの基本は理解していますが、いくつありますか?そして、なぜ日食は私にエラーを何度もスローするのですか?なぜ時々コンテキストを宣言する必要があるのですか?:

Context context;

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

4

3 に答える 3

67

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

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

いくつか例を挙げます。

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

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

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

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

于 2013-02-02T04:07:32.010 に答える
11

コンテキスト機能

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

ここに画像の説明を入力してください

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

元の記事はこちら

于 2016-08-04T17:51:41.203 に答える
5

文脈によって私が理解するのは環境です。簡単に言えば、文脈はあらゆるものの周囲です。したがって、何らかの形の文脈を使用しているときは、文脈を使用しているものの周囲をどうするかを決定する必要があります。

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

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

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

コンテキスト「this」を使用してサービスコンポーネントでalertDialogを使用しようとした場合、これを試してみてください。「this」はサービスの環境を表すため、例外が発生する可能性があります。これはバックグラウンドコンポーネントであるため、その中にウィンドウを追加します。したがって、不正なトークンの例外が表示されます。これは、周囲のビュー用に生成されたトークンが、alertDialogの表示に適していないことを意味します。

これがあなたが望むものの簡単なアイデアをあなたに与えることを願っています。

于 2013-02-02T08:07:15.943 に答える