它会泄漏吗?自定义单例中的FirebaseAnalytics.getInstance

Viz*_*har 2 android memory-leaks firebase firebase-analytics

我还是完全不明白内存泄漏.我用static方法创建了自定义单例:

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

我想知道如果我实例化它是否会发生内存(活动)泄漏Activity.我不确定,因为其他Firebase工具在实例化时起作用ContentProvider和不需要Context.官方文件对我没有帮助.

Dou*_*son 10

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

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

  • 道格回答+1。FirebaseAnalytics 是单例的并且它绑定到应用程序上下文。应用程序是否保留它并不重要。您可以通过从两个不同的活动或服务和活动中调用 FirebaseAnalytics.getInstance() 来测试这一点,并且每次都会获得相同的实例。 (2认同)