# #android #firebase #firebase-authentication #leakcanary
Вопрос:
Приложение работает отлично, но в LeakCanary я получаю утечку каждый раз, когда закрываю приложение или приостанавливаю его.
Я также попытался удалить authListener, но утечка все равно осталась.
Я пытался решить многими различными способами, но безуспешно, может ли кто-нибудь мне помочь?
Мои реализации таковы:
implementation platform('com.google.firebase:firebase-bom:28.2.0')
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
Мой сокращенный код таков:
class MainActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
private lateinit var authListener: AuthStateListener
private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract()
) { res -> this.onSignInResult(res) }
override fun onCreate(savedInstanceState: Bundle?) {
auth = Firebase.auth
authListener = checkCurrentUser()
}
public override fun onStart() {
super.onStart()
auth.addAuthStateListener(authListener)
}
private fun checkCurrentUser() : AuthStateListener {
return AuthStateListener {
val user = it.currentUser
if (user != null amp;amp; !user.isAnonymous()) {
// User is signed in
} else {
// No user is signed in
signInAnonymously()
}
}
}
private fun signInAnonymously() {
auth.signInAnonymously()
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d(AnonymousTAG, "signInAnonymously:success")
//val user = auth.currentUser
} else {
// If sign in fails, display a message to the user.
Log.w(AnonymousTAG, "signInAnonymously:failure", task.exception)
}
}
}
override fun onStop() {
auth.removeAuthStateListener(authListener)
super.onStop()
}
override fun onDestroy() {
AppDatabase.distruggiInstance()
super.onDestroy()
}
}
Всякий раз, когда я закрываю приложение или приостанавливаю его, я получаю эту утечку:
┬───
│ GC Root: Global variable in native code
│
├─ com.google.firebase.auth.api.fallback.service.zza instance
│ Leaking: UNKNOWN
│ Retaining 1,9 kB in 10 objects
│ zza instance of com.google.firebase.auth.api.fallback.service.
│ FirebaseAuthFallbackService
│ ↓ zza.zza
│ ~~~
╰→ com.google.firebase.auth.api.fallback.service.FirebaseAuthFallbackService
instance
Leaking: YES (ObjectWatcher was watching this because com.google.firebase.
auth.api.fallback.service.FirebaseAuthFallbackService received
Service#onDestroy() callback and Service not held by ActivityThread)
Retaining 1,3 kB in 9 objects
key = b2e73ab0-d520-4fb8-b858-c9c7a9012f2d
watchDurationMillis = 5205
retainedDurationMillis = 202
mApplication instance of androidx.multidex.MultiDexApplication
mBase instance of android.app.ContextImpl
METADATA
Build.VERSION.SDK_INT: 30
Build.MANUFACTURER: Xiaomi
LeakCanary version: 2.7
App process name: it.xxxx.yyyyyyyyyy
Stats: LruCache[maxSize=3000,hits=2287,misses=64227,hitRate=3%]
RandomAccess[bytes=3141160,reads=64227,travel=29029887588,range=22210809,size=28
401420]
Heap dump reason: 1 retained objects, app is not visible
Analysis duration: 13350 ms```
Ответ №1:
SDK Firebase
клиента Android вызывает утечку памяти, и многие пользователи сталкиваются с этим.
Это подано как внутренняя ошибка в репозитории Github firebase/firebase-android-sdk проблема #2387.
Комментарии:
1. большое вам спасибо за ваш ответ, он меня ободряет
2. @N3g4tivo Если этот ответ был полезен, вы можете принять и проголосовать за ответ.