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

Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast at android.os.Handler.dispatchMessage

我在我的 android 应用程序上使用广播消息(从 io.socket 我正在向我的 Activity 页面发送广播消息)。在某些三星 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)

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

根据用户反馈,我最终缩小了范围并做了以下修改:

1) 我检查了应用程序并确保用于 Intents 的所有自定义 "action" 字符串都包含应用程序的包名称。

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

You can see my full answer on a different post here

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

//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);

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

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

所以问题出在您发送的内容上。尝试更改它,它将起作用。