Dagger 2创建的对象在Android中保留多长时间/ Dagger 2如何与Android Activity生命周期一起玩?

daz*_*000 4 android dagger-2

假设我们有一个@Singleton应用程序模块,它创建并返回一个Hashmap用于存储配置数据的模块.如果配置数据在hashmap中被修改并且android应用程序进入后台并且让我们说onPause()和onStop()被调用.

  • 是否会破坏由dagger创建的hashmap?
  • 如果应用程序返回到前台,那么添加到hashmap的现有配置数据是否仍然存在?

Dav*_*jak 6

Dagger 2如何使用Android Activity生命周期?

它不会.但是你可以.

匕首除了Pojos之外别无他法.Pojos知道依赖关系,并在需要时将它们提供给您.没有更多,仅此而已.

如何使用这些对象(组件)完全取决于您.

由于大部分的例子表现出来,有一个AppComponent一般,不停地在Application和某种ActivtiyComponent每个Activity.

AppComponent保持应用程序,共享其生命周期,如果应用程序就会被杀死或重新建立,因此确实的组成部分,所以做你的对象.

ActivityComponent创建并保持activtiy内.再一次,如果重新创建活动,组件也是如此.它只是分配给您活动中的字段的对象.

那么为什么应用程序和活动组件之间存在差异?

应用程序组件仅引用应用程序上下文,并提供可以在没有进一步信息的情况下提供的类.

活动组件还将包含有关活动的信息.它可以访问视图,片段处理程序等:活动内容!您为每个活动创建一个新组件,因为如果您不使用匕首,您还将使用当前活动而不是引用(和泄漏!)到处都是相同的活动.

回答你的问题

如果现在还不清楚,如果你HashMapAppComponent(并且@Scope它!)中创建你的内容HashMap,那么如果你正确使用你的,你的整个应用程序中都是一样的AppComponent.一旦应用程序与您的Application实例一起终止,它将被销毁.

如果您在其中创建它将ActivityComponent具有与活动对象相同的生命周期.onCreate如果savedInstanceState包含您的数据,您可能必须重新初始化内容.


这一切都说,不要使用静态变量.如果将组件分配给静态变量,它们将破坏设置并导致内存泄漏.

如果您在中创建组件,onCreate则无需任何其他设置即可.只是不要使用静态变量来保存组件,但要确保它分别位于您的活动或应用程序中.