android - zza.zza FirebaseAuthFallbackService 泄漏

标签 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 && !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```

最佳答案

编辑:2022 年 3 月 17 日

正如 Github 问题链接(下面发布的链接)中所述,此问题已在 Firebase 身份验证库版本 21.0.2 中修复。


Firebase Android 客户端 SDK 导致内存泄漏,许多用户都面临着这个问题。

这已在 Github 存储库上作为内部错误归档 firebase/firebase-android-sdk问题#2387 .

关于android - zza.zza FirebaseAuthFallbackService 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68236831/

相关文章:

android - 在真实设备上调试已安装的应用程序

java - Arraylist 不断显示最后一个元素 n 次

swift - Google 登录和 Firebase 身份验证的关系?

javascript - 如何正确使用通过Firebase身份验证获得的Facebook token ?

node.js - TypeError : firebase. 函数不是函数

javascript - 在 Nuxt JS 中创建 Vue 应用程序之前检查 Firebase onAuthStateChanged

java - 将包含 `0x00` 的字节数组替换为 `0x30`

安卓日期本地化

android - 如何使用 Firebase 建立用户存在机制?

android - Firebase java对象序列化和继承