3

この投稿では

アクティビティコンテキストまたはアプリケーションコンテキストをいつ呼び出すか?

マークマーフィーは言います

「getApplicationContext()からのコンテキストが、クリーンアップしない呼び出しによって作成されたものを保持している場合、メモリリークが発生する可能性があります。アクティビティを使用して、何かを保持している場合、アクティビティがガベージコレクションされると、他のすべてがフラッシュも実行されます。Applicationオブジェクトは、プロセスの存続期間中残ります。」

アプリケーションコンテキストが保持するものを作成する呼び出しは何ですか?

私はさまざまなことのコンテキストを必要とするライブラリを持っています。バックグラウンドで実行でき、アクティビティにまたがりますが、アクティビティコンテキストを使用および更新するには問題があります。

これはおそらく、アプリケーションコンテキストを使用することが望ましい場合の1つだと思いますか?

4

2 に答える 2

1

ライブラリ内のオブジェクトの存続期間が複数のアクティビティにまたがる可能性がある場合は、アプリケーションコンテキストを絶対に使用してください。アクティビティコンテキストを使用すると、ガベージコレクタがコンテキストを破棄するのを防ぐことができます。アクティビティコンテキストはかなりの量のデータを保持できるため、メモリ使用量が大幅に増加する可能性があります。

また、アクティビティが閉じられると、ウィンドウトークンを放棄します。そのコンテキストでダイアログを生成しようとすると、が表示されますBadTokenException。したがって、オブジェクトがアクティビティのライフサイクルに直接関連付けられていない場合、オブジェクトにアクティビティのコンテキストを与える意味はありません。

編集:ここに信頼できる情報源があります

于 2012-06-27T12:26:45.947 に答える
0

私の図書館プロジェクトの1つで同じ問題に直面しています。

ライブラリプロジェクトでもアクティビティコンテキストを使用することをお勧めします。アクティビティコンテキストのみを必要とするコンポーネントはたくさんあります。例:ダイアログ。したがって、私の提案は、アクティビティコンテキストをプロジェクトからライブラリプロジェクトに渡すことです。

ただし、アプリケーションコンテキストは、ライブラリプロジェクトでのシリアル化の問題を回避できます。

于 2012-06-27T11:04:01.017 に答える