2017-04-25 12 views
1

메모리 누수를 완전히 이해하지 못합니다. 나는 static 방법으로 사용자 정의 싱글을 만들었습니다누설 될 수 있습니까? 커스텀 싱글 톤의 FirebaseAnalytics.getInstance

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

그리고 내가 Activity에서 인스턴스화하는 경우 메모리 (활동) 누수 발생 여부를 알고 싶어요. 다른 Firebase 도구가 ContentProvider으로 작동하고 인스턴스화 할 때 Context이 필요하지 않기 때문에 확실하지 않습니다. Official docummentation 나를 도와주지 않습니다.

답변

8

허용되는 대답이 올바르지 않습니다. Firebase Analytics (그리고 Context를 받아들이는 다른 모든 Firebase 싱글 톤)는 전달한 것과 동일한 컨텍스트를 보유하지 않습니다. 그것은 그 객체에 대해 Context.getApplicationContext()을 사용하여 객체의 수명 동안 유지할 진정한 싱글 톤 컨텍스트를 얻습니다. 이것은 컨텍스트가 무기한 보유하도록 요구하는 지능형 Android API가 작동하는 방식입니다.

주어진 코드에서 유일한 문제는 두 개의 서로 다른 스레드에서 빠르게 연속해서 호출 될 때 AnalyticsHelper의 두 인스턴스를 만들 수 있다는 것입니다.하지만 그럴 가능성은 거의 없습니다.

+0

+1 더그 대답입니다. FirebaseAnalytics는 싱글 톤이며 애플리케이션 컨텍스트에 바인딩됩니다. 앱이 유지하는지 여부는 중요하지 않습니다. 두 개의 다른 Activity 나 Service and Activity에서 FirebaseAnalytics.getInstance()를 호출하면이를 테스트 할 수 있으며 매번 같은 인스턴스를 얻을 수 있습니다. – djabi