2017-06-08 7 views
-1

プレゼンターをスコープに配置することは、どのようなベストプラクティスですか?ダガー2スコープは、プレゼンターを配置する場所ですか?

私は@Singletonまたは@AppScopeにプレゼンターを問題なく置くことができますか?

アクティビティが破棄されるたびにそれらを破棄するには、それらを@ActivityScopeに配置する必要がありますか?

+2

私は昨日、プレゼンターと問題を保持する方法について同様の回答を書いていますが、スコープでどのように再生されているのか、見てみたいです。https://stackoverflow.com/a/44398997/1837367 –

+0

本当によく説明された答えです。私は現在、@ Singletonスコープのプレゼンターを持つプロジェクトに直面しています。私は個人的にはそれが好きではありません。それで私はこの質問をしていたのです。スコープを作成したときに、そのスコープのすべてのプロバイダが初期化されるという別の質問があります。 –

答えて

2

プレゼンターをスコープに配置することは、どのようなベストプラクティスですか?

通常プレゼンターは一部範囲にする必要があります。どの範囲にも配置しないと、問題が発生します。プレゼンターにリクエストするたびに新しいプレゼンターが作成されるためです。

どのスコープを選択するかは、プログラミングスタイルに大きく左右されますが、最も一般的なのはアクティビティのライフサイクルに従うスコープとして@PerActivityです。 (あなたはフラグメントとそのライフサイクルで@PerFragmentのようなものを使用することができるのと同じ方法)

は、我々は何の問題もなく@Singletonまたは@AppScopeのプレゼンターを持ってもらえますか?

はい、いいえ。より寿命の短いものを参照するより長い生存オブジェクト(例えば、アクティビティライフサイクルを参照する@Singletonオブジェクト)は、通常、メモリリークを招く可能性のある良い習慣ではありません。

短命のオブジェクトを適切に追加/削除する(例:onCreateを追加、onDestroyを削除する)か、WeakReferenceを使用してこれらの問題を回避できます。

一部のプログラマは、プレゼンターを@Singletonとしたり、同様の方法でスワップしたりしますが、これはコードの好みによって異なります。それは動作しますが、参照するオブジェクトを確認してから、後でクリーンアップする必要があります。

アクティビティが破棄されるたびにそれらを破棄するには、それらを@ActivityScopeに配置する必要がありますか?

これは、アクティビティやそれに依存するその他のものを参照する際に問題がないので、これははるかに簡単なオプションです。メモリリークやその他の問題をこのように心配する必要はほとんどありません。


最後に

そのあなたコードとあなたはあなたのために最高の作品何をしなければなりません。

+0

あなたの詳細な回答に感謝します。私はいつも@ActivityScopeのアプローチで作業してきました。そのため、すべてのプレゼンターを同じ範囲に置くことに疑問を抱いていました。 –

関連する問題