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

时间:2016-04-27 22:36:09

标签: android dagger-2

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

  • 匕首创建的hashmap会被销毁吗?
  • 如果应用程序回到前台,那么添加到hashmap的现有配置数据是否仍然存在?

1 个答案:

答案 0 :(得分:6)

  

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

它没有赢。但你可以。

除了Pojos之外,Dagger什么也不做。 Pojos知道依赖关系并在需要时将它们提供给您。没有更多,仅此而已。

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

正如大多数示例所示,一般AppComponent保留在Application中,每个ActivtiyComponent保留一些Activity

AppComponent保存在应用程序中,以共享其生命周期 - 如果应用程序被杀死或重新创建,组件也是如此,对象也是如此。

ActivityComponent已创建并保留在活动中。再一次,如果重新创建活动,组件也是如此。它只不过是分配给活动内部字段的对象。

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

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

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

回答你的问题

如果现在还不清楚,如果您在HashMap(以及AppComponent它!)内创建@Scope,那么您的HashMap就会相同AppComponent整个申请,如果您正确使用Application。一旦应用程序与您的ActivityComponent实例一起终止,它就会被销毁。

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

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

如果您在element_found = browser_open.find_elements_by_xpath("//form[@name='xxxx']/div[@id='xxxx']/div[@id='xxxx']/div[@id='xxxxx']/div[@id='xxxxx']/table/tbody/tr[1]/td[2]/table/tbody/tr[1]/td[9]/") 中创建组件,则无需任何其他设置即可。只是不要使用静态变量来保存组件,但要确保它分别位于您的活动或应用程序中。