会不会漏? FirebaseAnalytics.getInstance 在自定义单例中
Will it leak? FirebaseAnalytics.getInstance in custom singleton
我还是完全不明白内存泄漏。我使用 static
方法创建了自定义单例:
public static AnalyticsHelper getInstance(Context context) {
return analyticsHelper == null ?
analyticsHelper = new AnalyticsHelper(FirebaseAnalytics.getInstance(context)) :
analyticsHelper;
}
并且我想知道如果我在Activity
中实例化它是否会发生内存(activity)泄漏。我不确定,因为其他 Firebase 工具作为 ContentProvider
工作并且在实例化它们时不需要 Context
。 Official docummentation 帮不了我。
接受的答案不正确。 Firebase Analytics(以及所有其他接受上下文的 Firebase 单例)不持有您传递给它的相同上下文。它将在幕后对该对象使用 Context.getApplicationContext()
以获得真正的单例上下文以在对象的生命周期内保持。这就是智能 Android API 的工作方式,需要上下文无限期地保持。
给定代码中唯一的潜在问题是,当从两个不同的线程快速连续调用时,它可能会创建两个 AnalyticsHelper 实例,但这不太可能。
我还是完全不明白内存泄漏。我使用 static
方法创建了自定义单例:
public static AnalyticsHelper getInstance(Context context) {
return analyticsHelper == null ?
analyticsHelper = new AnalyticsHelper(FirebaseAnalytics.getInstance(context)) :
analyticsHelper;
}
并且我想知道如果我在Activity
中实例化它是否会发生内存(activity)泄漏。我不确定,因为其他 Firebase 工具作为 ContentProvider
工作并且在实例化它们时不需要 Context
。 Official docummentation 帮不了我。
接受的答案不正确。 Firebase Analytics(以及所有其他接受上下文的 Firebase 单例)不持有您传递给它的相同上下文。它将在幕后对该对象使用 Context.getApplicationContext()
以获得真正的单例上下文以在对象的生命周期内保持。这就是智能 Android API 的工作方式,需要上下文无限期地保持。
给定代码中唯一的潜在问题是,当从两个不同的线程快速连续调用时,它可能会创建两个 AnalyticsHelper 实例,但这不太可能。