android - Firebase SDK 在接收广播 Intent 时崩溃

标签 android firebase

在最近的更新中,我们开始看到 2 次崩溃来自 Firebase。这些崩溃都不可重现,它们发生的频率很低,但频率足以让我们担心。第一个出现在 Android 7 上的概率为 99%(在 Android 5 上为 1%):

Fatal Exception: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 (has extras) } in com.google.firebase.iid.f@96947cd
       at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1132)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.net.NetworkInfo.isConnected()' on a null object reference
       at com.google.firebase.iid.zzad.zzchp(Unknown Source)
       at com.google.firebase.iid.zzae.onReceive(Unknown Source)
       at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1122)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6119)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

这一个完全来自 Android 8:

Fatal Exception: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.conn.CONNECTIVITY_CHANGE flg=0x4000010 (has extras) } in com.google.firebase.iid.f@8746d6a
       at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52497(LoadedApk.java:1323)
       at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4)
       at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6494)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.net.NetworkInfo.isConnected()' on a null object reference
       at com.google.firebase.iid.zzad.zzchp(Unknown Source:24)
       at com.google.firebase.iid.zzae.onReceive(Unknown Source:7)
       at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_52497(LoadedApk.java:1313)
       at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.$m$7(Unknown Source:4)
       at android.app.-$Lambda$aS31cHIhRx41653CMnd4gZqshIQ.run(Unknown Source:39)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6494)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

不幸的是,Firebase SDK 被混淆了,所以我看不到崩溃的完整上下文,但抛出的异常是尝试执行 isConnected 方法的 NetworkInfo 对象上的 NPE。

这些是我们在此构建中使用的 firebase 库:

api "com.google.firebase:firebase-config:11.6.2"
api "com.firebase:firebase-jobdispatcher:0.8.4"

我们将 firebase-config 库从 11.2.0 升级到 11.6.2,并在之前的版本和我们开始看到的新版本之间添加了 jobdispatcher 库碰撞。我四处搜索,但没有看到任何关于该问题的现有对话,如果有人有洞察力,我们将不胜感激。谢谢!

最佳答案

我收到了 firebase 团队对我发送的有关此问题的错误报告的正式答复:

Yes, you are right. This is currently an issue from Firebase SDK 11.6.0 onwards.
Our engineers are currently working on a fix for this issue, but I can't share any details or timelines at this time.

In the meantime, I would suggest you to use the older version of the Firebase SDK.

You may check our release notes for any further updates.

关于android - Firebase SDK 在接收广播 Intent 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682530/

相关文章:

php - 当互联网消失时,如何将数据从mysql下载到android

firebase - 实现Firebase登录时AngularDart引发错误

ios - 错误 "HTML tag ' ul' 需要结束标记 FIREventNames.h"

javascript - 如何创建 Firebase Web user.reauthenticate() 方法所需的 “credential” 对象?

node.js - 设置 "firebase javascript"与 "ionic serve"一起使用

android - 处理 Google Play 服务更新消息

java - 防止对 Java/Kotlin 中的类的依赖,但允许扩展

java - 无法结束我的 Android 应用程序

swift - 登录 Firebase 后如何获取用户的 facebook 用户名(和其他用户信息)?

Android:不能使用 android.R.drawable 作为 textview 的背景图片