6

いくつかのシングルトンオブジェクトを「管理者」として使用しています。 Application.onCreateでインスタンス化し、ApplicationContextを渡します。これはWeakReferenceに格納されています。Androidコンテキスト弱参照

「管理者」の方法のいくつかActivityから呼び出された後、バックグラウンドタスクを開始するので、私はこの方法にActivityさんcontextを渡し、同様とWeakReferenceを保つ(およびAsyncTaskの内部を使用します)。この参照は、次回ActivityWeakReferenceが新しいActivitycontextに設定されているときに、バックグラウンドに行くメソッドを呼び出すまで保持されます。

私の質問は、ApplicationContextWeakReferenceに保管する必要があり、そのようActivityさんcontextを保つに問題があるんですか?

答えて

9

WeakReferenceをアクティビティのコンテキストに保つ理由は、既に破棄されている、または別の方法で破棄する必要があるActivityへの参照を保持しないようにするためです。 Applicationにはこのような問題はありません。その場合はWeakReferenceは不要です。

正確に何を使用しているのかを詳しく説明していないため、アクティビティのコンテキストの使用についてコメントするのは難しいです。あなたがいろいろな活動のために文脈を交換していることはちょっと疑わしいですね。具体的なアクティビティーのコンテキストが本当に必要な場合は、これでも問題はないかもしれませんが、有効なContextAsyncTaskと一緒に使用するには、アプローチを考え直すことを検討してください。それはおそらく動作しますが、それは少しハッキーです。必要に応じて、より適切な他のオプションがあります:IntentServiceLoadersは考慮すべきオプションです。

+0

AsyncTaskで 'Activity'の' context'を使わなければならないという印象があります。私は間違っていますか? 'ApplicationContext'が使えない状況はありますか?もし存在しなければ、私は 'ApplicationContext'を使って(自分の人生を楽にしてくれるように)かなり切り替えるでしょう。 – Eliezer

+0

'View'をインスタンス化するときに' ApplicationContext'を使用しないでください。あれは正しいですか? – Eliezer

5

通常、WeakReferenceにアプリケーションコンテキストを保持する必要はありません。しかし、あなたはWeakReferenceに他の種類のコンテキストを保持すべきです。

関連する問題