5

アプリケーションコンテキストを使用してリソースをロードおよびアクセスできるのに、なぜアクティビティコンテキストを使用するのですか? Activity Contextの代わりにApplication Contextを使用すると、例外が発生しないので、なぜActivity Contextを使用するのですか?

例:

以下の例では、アクティビティのonCreate()内で「 this」ポインタの代わりにgetApplicationContext()を使用すると、例外なく正常に動作します。

 Button button = new Button(getApplicationContext());
4

2 に答える 2

2

getApplicationContext()これはview、Activity の外側にスコープを持ちます (その例としては、Activity から Service にバインドする場合が考えられます)。

ただし、上記のように (ボタンを定義するために) ビューを定義するには、間違いなくActivity's Context(MyActivity.thisまたは Simply this) を使用する必要があります。

その理由は、を使用するgetApplicationContext()と、アプリケーション全体が存続する限り存続するためです。ただし、ボタンの場合、アクティビティが終了するとすぐに破棄する必要があるため、そのthisようなタイプのViews.

アクティビティコンテキストの代わりにアプリケーションコンテキストを使用すると、例外はありません

どちらも有効な Context であるため、例外はありません。ビューが必要なくても (最終的にはメモリ リークが発生します)、アプリケーションの有効期間全体にわたってビューを維持する場合、またはアクティビティが終了したらすぐにビューを破棄する場合は、あなたの責任です。

于 2012-12-29T07:50:36.473 に答える
0

どちらも Context のインスタンスですが、アプリケーション インスタンスはアプリケーションのライフサイクルに関連付けられていますが、Activityインスタンスはアクティビティのライフサイクルに関連付けられています。したがって、アプリケーション環境に関するさまざまな情報にアクセスできます。

getApplicationContextのドキュメントを読むと、ライフサイクルが現在のコンテキストとは別のコンテキストが必要な場合にのみ、これを使用する必要があることがわかります。これは、どちらの例にも当てはまりません。

Activity コンテキストには、おそらく、これらの呼び出しを完了するために必要な現在のアクティビティに関する情報が含まれています。正確なエラー メッセージを表示すると、必要なものを正確に指摘できる場合があります。

ただし、一般的には、正当な理由がない限り、アクティビティ コンテキストを使用してください。

于 2012-12-29T07:42:53.800 に答える