Dagger 2 Scopes,放置演示者的位置?

时间:2017-06-08 14:48:01

标签: android dependency-injection dagger-2 android-mvp

将演示者放在范围内的最佳做法是什么?

我们可以在@Singleton或@AppScope上有没有任何问题的演示者吗?

是否应将它们放置在@Act​​ivityScope中,以便在每次活动被销毁时销毁它们?

1 个答案:

答案 0 :(得分:4)

  

将演示者放在范围内的最佳做法是什么?

通常,演示者应该在某些范围内。不将它放在任何范围内都会导致问题,因为每次请求演示者时都会创建一个新的。

您选择的范围主要取决于您的编程风格,但最常见的可能是@PerActivity,作为遵循活动生命周期的范围。 (就像使用片段及其生命周期一样使用@PerFragment之类的东西)

  

我们可以在没有问题的情况下在@Singleton或@AppScope上安装演示者吗?

是和否。较长的活动对象引用较短的活动对象(例如引用活动生命周期的@Singleton对象)通常不是一种可能导致内存泄漏的好习惯。

您可以通过正确添加/删除生命较短的对象(例如,添加onCreate,删除onDestroy)或使用WeakReference来避免这些问题。

有些程序员会将他们的演示者保持为@Singleton或以类似​​方式和交换视图,但这又取决于您喜欢代码的方式。它会起作用,但你必须确定你引用的对象并在之后进行清理。

  

是否应将它们放置在@Act​​ivityScope中,以便在每次活动被销毁时销毁它们?

这是迄今为止最简单的选项,因为引用Activity或其他依赖于它的东西没有问题。你很可能不会以这种方式担心内存泄漏或其他问题。

最后,你的代码,你必须做最适合的事情。