为每个活动创建一个子组件-好的做法?

时间:2018-07-29 02:33:12

标签: java android kotlin dagger-2

我刚刚开始学习Dagger,并且想将其纳入我的应用程序中,在阅读了很多文章之后,我开始通过以下方式使用Dagger:

m=5

对于每个活动:

matrix[6]

是为每个活动的良好做法创建一个子组件,还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

为每个活动声明单独的组件根本不是一个好主意。这背后的原因很简单-您实际上并不需要所有这些模块/组件(就像您自己已经看到的那样)。

但是,仅将一个与Application的生命周期相关联的组件并用于将其注入到所有Activities中并不是最佳解决方案(这是您朋友的方法)。这不是最佳选择,因为:

  1. 它将您限制为一个范围(@Singleton或自定义范围)
  2. 您被限制的唯一作用域是使注入的对象成为“应用程序单例”,因此,作用域的范围错误或使用不正确的作用域对象很容易导致全局内存泄漏
  3. 您也想使用Dagger2来插入Services,但是Services可能需要与Activities不同的对象(例如Services不需要演示者,没有FragmentManager等)。通过使用单个组件,您失去了为不同组件定义不同对象图的灵活性。

因此,每个Activity的组件是过大的,但是整个应用程序的单个组件不够灵活。最佳解决方案介于这两个极端之间(通常如此)。

我使用以下方法:

  1. 提供“全局”对象的单个“应用程序”组件(例如,拥有在应用程序中所有组件之间共享的全局状态的对象)。在Application中实例化。
  2. “应用程序”组件的“控制器”子组件,该组件提供所有面向用户的“控制器”所​​需的对象(在我的体系结构中为ActivitiesFragments)。在每个ActivityFragment中实例化。
  3. “应用程序”组件的“服务”子组件,该组件提供所有Services所需的对象。在每个Service中实例化。