【问题标题】:What happens if I don't set Dagger 2 Component to null in Activity onDestroy()?如果我没有在 Activity onDestroy() 中将 Dagger 2 Component 设置为 null 会发生什么?
【发布时间】:2016-04-28 12:57:34
【问题描述】:

我发现如果在 Activity 中实例化 Dagger 2 组件,那么它稍后会在 onDestroy() 方法中为空,就像看到的 here 一样。

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 那个实例会发生什么?会发生什么?

旁注:in comments 我找到了有用的提示,为什么将其设置为 null,这非常令人信服:“我认为没有必要,但它定义了非常明确的范围”。 em>

【问题讨论】:

    标签: android android-activity activity-lifecycle dagger-2


    【解决方案1】:

    如果我不将该实例设为空会发生什么 [...]?

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

    如果您保留对 Activity 的静态引用或有其他类型的内存和 Activity 泄漏,这将不成立。但是,如果您拥有这些组件,那么 null 您的组件也不会产生太大影响。

    【讨论】:

    • “如果您保留对活动的静态引用或有其他类型的内存和活动泄漏,这将不成立。”你能详细说明一下吗?
    • @MarianPaździoch 你不清楚这到底是什么?如果您要泄漏您的活动,如果您不将其设置为 null,您也会泄漏该组件。如果您泄漏您的组件并引用您的活动,这也会泄漏您的活动,无论您是否将组件设置为 null。如果你将静态变量设置为任何一个,这只会导致它们泄漏。
    猜你喜欢
    • 2019-09-27
    • 2010-09-30
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多