2017-04-25 17 views
1

我完全不理解内存泄漏。我已经创建了定制单用static方法:它会泄漏吗?自定义单例中的FirebaseAnalytics.getInstance

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

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

回答

8

接受的答案是不正确的。 Firebase Analytics(以及接受Context的所有其他Firebase单身人士)并不拥有您传递给它的相同上下文。它将在幕后使用该对象上的Context.getApplicationContext()来获得一个真正的单体上下文来保存该对象的生命周期。这是智能Android API的工作方式,需要无限期地保持上下文。

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

+0

+1对于Doug的答案。 FirebaseAnalytics是单身人士,它绑定到应用程序上下文。应用程序是否保留它并不重要。您可以通过从两个不同的活动或服务和活动中调用FirebaseAnalytics.getInstance()来测试此功能,并且每次都会得到相同的实例。 – djabi