gpt4 book ai didi

android - Dagger2 自定义范围和销毁组件

转载 作者:行者123 更新时间:2023-12-01 01:49:36 27 4
gpt4 key购买 nike

据我了解,在确定组件和模块的范围时,(@)提供的实例将存在,只要暴露它们的组件存在。

更具体地说,在@User 范围组件的情况下,我们可以在用户注销时删除由用户特定数据填充的@provided 对象(由模块提供)。当新用户登录时,我们应该创建一个新的 Dagger 组件,该组件依次公开将使用该(新登录的)用户特定数据填充的对象。只要组件在注销时没有被破坏,这些对象将依次保持 Activity 状态。

我的问题很简单,我们如何在注销时销毁(子)组件?
我们只是将组件设置为 null 以便它可以被垃圾收集,并通过构建器手动创建一个新组件就足够了吗?

最佳答案

你必须自己清理。销毁组件不会破坏其作用域对象,如果您对作用域对象的引用比组件生命周期更长,则通常是内存泄漏的良好来源。

Dagger 将注入(inject)或构造您的对象,但您如何处理这些对象完全取决于您。如果您要保存 User从您的 UserComponent 获得的对象在静态变量中,在组件被垃圾收集后,它显然仍然可用。

为防止出现此类问题,最好不要使用静态变量,并在将短生命周期对象交给生命周期较长的对象时要小心。

如果您有一些 UserScoped 对象,那么在您的 Application 中引用它不是一个好主意。 ,除非您在用户注销时将引用连同您的组件一起删除。最简单的方法是重新接收有权访问用户范围组件的每个 fragment 、服务和 Activity ,并清理包含该组件的应用程序/单例。

如果您不将任何生命周期较短的对象“泄漏”给生命周期较长的对象,则垃圾收集器将处理其余部分。

关于android - Dagger2 自定义范围和销毁组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615085/

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