当前位置: 首页 > 知识库问答 >
问题:

匕首2使用范围

蓝慈
2023-03-14

我在android项目中使用Dagger2我有两个作用域:ActivityScope和FragmentScope我读了一些示例代码,他们说定义并使用ActivityScope,所以对象将在activity lifecycle中销毁。因为活动和片段有不同的生命周期,所以我们应该有两个作用域。

我的问题是:我是否需要做一些事情让代码知道,当我使用ActivityScope时,对象应该随活动生命周期一起销毁?或者,当我构建dagger并将其注入这样的活动时,代码会自动知道这一点

((DeezFoodzApplication) getApplication()).getAppComponent().inject(this);

共有1个答案

经景辉
2023-03-14

我是否需要做一些事情让代码知道,当我使用ActivityScope时,对象应该随活动生命周期一起销毁?

没有。垃圾收集器会处理它(除非您将它存储在某个静态变量中)。

Dagger只知道如何创建或注入对象。它不关心生命周期、何时何地注入/创建对象,也不关心如何存储组件。没有魔法在进行,没有服务在运行,也没有其他黑客参与。组件只是一些java类,它们知道如何用对象填充活动中的这些字段。这就是全部。

  • 如果您不储存该组件,它将在使用后被garbae收集
  • 如果将组件存储在活动/片段的字段中,则在onDestroy之后,它将与活动/片段一起被垃圾收集
  • 如果您将组件存储在某个静态变量中或将其传递到某个长期存在的地方,那么它将一直保留在那里,直到您nullit或该对象被垃圾回收为止。(另外,您的活动/片段可能会泄漏)避免将组件存储在静态变量中

这只是一个普通的物体,就像其他任何物体一样,试着不要想太多。您可以随时检查生成的源代码或调试它。

 类似资料:
  • 问题内容: 我可能错过了一些东西,但我认为像@Singleton这样的作用域用于定义“作用域生命周期”。 我在Android应用程序中使用了Dagger 2(但我认为问题根本与android相关)。 我有1个模块: 我有两个与范围不同的组件: 两者,并且,有一个构造函数。虽然MenuPresenter期望将其作为参数,但LoginPresenter却采用了: 但是每次我使用这些组件创建一个或时,都

  • Dagger 2即将面世,但可用的示例甚至无法立即编译,文档是Dagger 1的复制粘贴替换。 有没有人有一个在谷歌的Dagger 2上运行的正确应用程序的例子?

  • 这很好,但是如果我使用全局组件甚至子组件中的一个模块,那么应该传入上下文。因此,这意味着如果我用匕首注入演示器,它将被绑定到ApplicationContext。这使得作为JUnit进行测试变得困难。Android代码不应该在演示器中。 所以我想问的是,最好的做法是只在活动、片段、广播接收器和服务中使用匕首吗?就mvp架构而言,这就是。另一个解决方案是设计另一个dagger组件,但不是与appco

  • 在我的应用程序中,我试图创建组件 null 我已经创建了组件,并从应用程序类启动。 ContextModule类如下所示 上下文组件将是 错误:

  • 我看了几篇不同的文章,这些文章似乎建议在Dagger 2中使用两种不同的方法进行自定义范围界定: > 在配置更改第2部分(Github repo)中幸存的MVP演示者: 为每个片段使用唯一的自定义作用域,例如分别为和的

  • 我在应用程序中有多个匕首瞄准镜 UserScope-范围表示用户会话 ActivityScope-每个活动的范围 UserComponent-CoreComponent的子组件 UserManager-创建UserComponent的单例程序 HomeComponent-依赖于UserComponent的组件 我试图在下更新用户对象,但不知何故,对象更新没有反映在它的依赖组件上。因此,一旦更新屏幕