You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用RemoteServiceException异常:广播无法投递问题咨询

解决android.app.RemoteServiceException: can't deliver broadcast异常

首先明确核心误区:
LocalBroadcastManager仅负责应用内本地广播的收发,根本无法接收系统发出的Intent.ACTION_BATTERY_CHANGED全局广播,所以改用它后接收器完全不会触发,属于用法错误。

原异常的根本原因

你用Activity上下文注册广播接收器后,未在Activity生命周期结束时及时注销。当Activity已销毁(比如用户退出页面),系统尝试投递电池状态广播时,找不到有效的Activity上下文,就会抛出RemoteServiceException。

正确实现方案

1. 绑定接收器到Activity生命周期

将接收器的注册/注销与Activity的onResume/onPause生命周期绑定,确保接收器的存活周期与Activity一致,避免上下文失效:

private lateinit var batteryReceiver: MyReceiver
private lateinit var batteryFilter: IntentFilter

override fun onResume() {
    super.onResume()
    // 初始化过滤器和接收器
    batteryFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
    batteryReceiver = MyReceiver()
    // 注册广播接收器
    registerReceiver(batteryReceiver, batteryFilter)
}

override fun onPause() {
    super.onPause()
    // 务必注销接收器,避免内存泄漏和广播投递异常
    unregisterReceiver(batteryReceiver)
}

2. 关键注意事项

  • Intent.ACTION_BATTERY_CHANGED是系统粘性广播,注册后会立即收到当前电池状态的广播,无需等待状态变化。
  • 除非你明确需要后台长期监听电池状态,否则不要用Application上下文注册该接收器,否则会导致接收器长期驻留内存,引发不必要的资源消耗和潜在泄漏。

内容的提问来源于stack exchange,提问作者Anju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:32:23