gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:24 24 4
gpt4 key购买 nike

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

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

最佳答案

How does Dagger 2 play with the Android Activity lifecycle?

不会的。但你可以。

Dagger 除了 Pojos 什么都没有。了解依赖项并在您需要时将它们提供给您的 Pojos。仅此而已。

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

正如大多数示例所示,通常有一个 AppComponent,保存在 Application 中,每个 ActivtiyComponent 都有一些 Activity

AppComponent 保留在应用程序中,以共享其生命周期——如果应用程序被终止或重新创建,那么组件也将如此,您的对象也是如此。

ActivityComponent 被创建并保存在 Activity 中。再一次,如果 Activity 被重新创建,组件也会重新创建。它只不过是一个分配给 Activity 中字段的对象。

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

应用程序组件将仅引用应用程序上下文,并提供无需进一步信息即可提供的类。

Activity 组件还将包含有关 Activity 的信息。它可以访问 View 、 fragment 处理程序等等:Activity 东西!您为每个 Activity 创建一个新组件,因为如果您不使用 Dagger ,您也会使用当前 Activity ,而不是在任何地方引用(和泄漏!)同一个 Activity 。

回答你的问题

如果现在还不清楚,如果您在 AppComponent(和 @Scope 它!)中创建您的 HashMap,它将如果您正确使用 AppComponent,则在整个应用程序中使用相同的 HashMap。一旦应用程序与您的 Application 实例一起终止,它将被销毁。

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


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

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

关于android - Dagger 2 创建的对象在 Android 中保留多长时间/Dagger 2 如何玩转 Android Activity 生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36902160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com