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

如果在Activity onDestroy()中将Dagger 2组件设置为null,会发生什么?

国胤
2023-03-14

我看到,如果在活动中实例化Dagger 2组件,那么稍后在onDestroy()方法中将其置空,如图所示。

public class MyActivity {
    private MyActivityComponent component;
    //...

    public void onCreate() {
        component = Dagger_MyActivityComponent.builder()
            .myApplicationComponent(App.getComponent())
            .build()
            .inject(this);

        //...
    }

    public void onDestroy() {
        component = null;
    }
}

如果我不null该实例会发生什么,会发生什么?

旁注:在评论中,我发现了一个有用的提示,为什么人们会将其设置为null,这很有说服力:“我认为这没有必要,但它定义的范围非常清楚”。

共有1个答案

仉洲
2023-03-14

如果我不将该实例设为null[…],会发生什么?

没什么。在onDestroy调用后,活动对象将在某个时候被垃圾收集。如果重新创建活动,它将是一个新对象。您的匕首组件也将随着您的活动一起被垃圾收集。我通常不null我的组件在onDestroy,因为我认为这是不必要的。

如果您保持对活动的静态引用,或者存在其他类型的内存和活动泄漏,则这将不成立。但是如果您有这些,那么如果您null您的组件,也不会有太大的区别。

 类似资料:
  • 问题内容: 线程启动后,如果该线程的引用设置为,那么该线程将如何处理?会停止吗?它有资格获得GC吗? 像这样: 问题答案: 实时线程将继续运行,即使其引用设置为null。 就像任何其他对象一样,当没有任何引用时,它就有资格使用GC。棘手的一点是,即使您的程序未保留一个 正在运行的线程 在ThreadGroup中的引用,因此 也永远不会 对 正在运行的线程进行GC。

  • 问题内容: 我有以下映射 我如何配置我的Mapper或Mappings,以便当childId为null时,将目标Entity.child设置为null而不是Entity.child.id? 问题答案: 对于我来说,找到的不是一个非常优雅的解决方案,而是可行的解决方案。 首先将接口更改为抽象类,然后添加

  • 我在代码中使用了嵌套的Coroutine块。当我试图将Deferredtype的结果转换为变量时,得到了一个空值。因此,它导致了一个转换问题,即kotlin.TypeCastException:null不能转换为getNearbyHealthInstitutions()方法返回行中的非空类型kotlin.Collections.ArrayList。我相信,我在某个时候做了正确的实现,但是我错过了什

  • 问题内容: 我希望将值设置为如果我提交的表单中的文本框未放入任何内容。我怎样才能做到这一点?我尝试插入,但这只是将单词添加到字段中。 我不确定应该为此提供什么代码,我只是在编写UPDATE查询。 问题答案: 不要在更新语句中加引号。这应该工作:

  • 我想允许用户选择日历上的开始和结束日期。我使用的是反应日期。 我希望它像下面这样工作 初始开始日期和结束日期将为空。当用户选择开始日期(如10月10日)时,第一次单击时,enddate也设置为startdate(10月10日),并且开始日期(10月10日)之前的日期和从开始日期算起6周后的日期将被禁用,现在当用户选择enddate(如10月13日)时,enddate设置为13th oct,并且在选

  • 我是线程新手,目前正在学习线程同步章节。关于线程锁定中的一个场景,我有一个问题 以下是我所知道的: 1:当我在实例方法中放置实例锁时(即) 这里将发生的情况是,如果有一个类X的对象A被多个线程共享,并且一些线程t1正在执行f1的块,那么直到t1退出f1块,所有试图进入函数f3的其他线程,f1都将被阻止。f2和f4的情况也是如此。 现在,在静态锁的情况下,如果一个类有多个静态方法,并且我们希望这些方