【问题标题】:Will it leak? FirebaseAnalytics.getInstance in custom singleton会泄漏吗?自定义单例中的 FirebaseAnalytics.getInstance
【发布时间】:2017-04-25 08:46:22
【问题描述】:

我仍然完全不了解内存泄漏。我用static 方法创建了自定义单例:

public static AnalyticsHelper getInstance(Context context) {
    return analyticsHelper == null ?
            analyticsHelper = new AnalyticsHelper(FirebaseAnalytics.getInstance(context)) :
            analyticsHelper;
}

我想知道如果我在Activity 中实例化它是否会发生内存(活动)泄漏。我不确定,因为其他 Firebase 工具作为 ContentProvider 工作,并且在实例化它们时不需要 ContextOfficial docummentation 帮不了我。

【问题讨论】:

    标签: android firebase memory-leaks firebase-analytics


    【解决方案1】:

    接受的答案不正确。 Firebase Analytics(以及所有其他接受 Context 的 Firebase 单例)不包含您传递给它的相同上下文。它将在幕后对该对象使用Context.getApplicationContext(),以获取真正的单例上下文以在对象的生命周期内保存。这就是需要 Context 无限期保存的智能 Android API 的工作方式。

    给定代码中唯一的潜在问题是,当从两个不同的线程快速连续调用时,它可能会创建两个 AnalyticsHelper 实例,但这不太可能。

    【讨论】:

    • 道格回答+1。 FirebaseAnalytics 是单例的,它绑定到应用程序上下文。应用程序是否保留它并不重要。您可以通过从两个不同的活动或服务和活动调用 FirebaseAnalytics.getInstance() 来测试这一点,您每次都会得到相同的实例。
    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2021-10-08
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多