致命异常:android.app.RemoteServiceException:无法在 android.os.Handler.dispatchMessage 传送广播

Posted

技术标签:

【中文标题】致命异常:android.app.RemoteServiceException:无法在 android.os.Handler.dispatchMessage 传送广播【英文标题】:Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast at android.os.Handler.dispatchMessage 【发布时间】:2018-04-08 19:54:48 【问题描述】:

我在我的 android 应用程序上使用广播消息(从 io.socket 我将广播消息发送到我的活动页面)。在三星 SM-G950FSM-A520F 的某些设备上,我收到错误“Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast”。我在 Fabric crashlytics 上遇到了这个错误,我也无法重现这个问题。这是我从 Fabric 获得的日志,

   Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1813)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6776)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

【问题讨论】:

在服务尝试发送广播时,您的广播接收器活动/片段似乎正在被系统破坏。查看源代码android.googlesource.com/platform/frameworks/base/+/master/… 第 498 行。这似乎是一个随机问题。一种可能的解决方法是在 onResume() 中注册广播接收器,并在片段/活动的 onPause() 中取消注册。 【参考方案1】:

我的应用程序遇到了同样的问题,我所做的是使用 LocalBroadcastManager 而不是上下文。 Android 文档还建议使用 LocalBroadcastManager 发送应用内广播接收器。

//register your receiver like this
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
          new IntentFilter("custom-event-name"));

// unregister  like this
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);

// broadcastlike this
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

希望这会有所帮助。谢谢! :)

【讨论】:

我什至没有 LocalBroadcastManager 的用法,但我最近收到了这个错误。虽然非常罕见的错误。到目前为止只发生过一次,在带有 Android 9 的 OnePlus 5T 上......还有其他想法为什么会发生这种情况吗? @android 开发者和我发生了同样的事情......你有什么解决方案吗? @Kamwave 不知道为什么会发生。我只是选择忽略它,就像我见过的其他非常罕见的奇怪案例一样。我认为,一般来说,如果您发现仅限中文的设备出现问题,您可以忽略它们,因为您几乎无能为力。请参阅此处:dontkillmyapp.com 和此处:issuetracker.google.com/issues/122098785。也请考虑给这个问题加星标。中国制造商毁掉应用程序真的很糟糕(他们默认这样做)。 也可以看到这些(尽管它们很少见),但仅限于运行 Android Pie 的 OnePlus 设备上。这是无法修复的。【参考方案2】:

我经历了完全相同的事情,几乎完全相同的时间,使用相同的设备。这个问题最终与我支持的应用程序有关,但我认为三星推出了某种类型的更新,开始引发问题。在 10 月下旬之前,该应用程序从未出现过此问题。这让我抓狂,因为我不知道是哪个广播引发了问题。

根据用户的反馈,我最终缩小了范围,做了如下改动:

1) 我浏览了应用程序并确保用于 Intent 的所有自定义“操作”字符串都包含应用程序的包名称。

2) 我从使用 Context::sendBroadcast() 切换到 LocalBroadcastManager::sendBroadcast()。

You can see my full answer on a different post here

【讨论】:

【参考方案3】:

我遇到了同样的问题。我正在发送很长的 json 字符串。 当我刚刚用“hello”替换字符串时(意味着测试我的代码是否有问题的非常短的字符串)然后它可以正常工作。

所以问题在于您发送的内容。尝试改变它,它会起作用。

【讨论】:

以上是关于致命异常:android.app.RemoteServiceException:无法在 android.os.Handler.dispatchMessage 传送广播的主要内容,如果未能解决你的问题,请参考以下文章

片段中的Android致命异常

致命异常主要android

致命错误:未捕获的异常 PAYPAL

在android应用程序中出现致命异常

致命异常:TokenRefresher

我的应用程序不断崩溃(致命异常)