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

代码注册BroadcastReceiver出现IntentReceiverLeaked错误求助

解决IntentReceiverLeaked错误:在Service中正确管理BroadcastReceiver

嘿,我知道你遇到的这个IntentReceiverLeaked问题是怎么回事了——这通常是因为你在Service里注册了BroadcastReceiver,但没在Service销毁的时候及时注销它,导致接收器还绑定在已经被销毁的Service实例上,引发了内存泄漏。

给你几个具体的解决步骤,结合你的代码来调整:

1. 务必在Service销毁时注销接收器

你需要在Service的onDestroy()方法里调用unregisterReceiver(),把之前注册的接收器释放掉,这是解决泄漏的核心。修改后的代码大概是这样:

public class MyAlarmServiceClass extends Service { 
    private StopListener listener; // 把listener设为类的成员变量,方便后续注销

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
        return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
        listener = new StopListener(); 
        // 补全完整的Action:断开充电器的广播Action是Intent.ACTION_POWER_DISCONNECTED
        registerReceiver(listener, new IntentFilter(Intent.ACTION_POWER_DISCONNECTED)); 
        // 根据你的业务需求选择合适的返回值,比如START_STICKY
        return START_STICKY; 
    } 

    @Override
    public void onDestroy() {
        super.onDestroy();
        // 注销前先判空,避免空指针异常
        if (listener != null) {
            unregisterReceiver(listener);
            listener = null; // 置空帮助GC回收资源
        }
    }

    // 你的BroadcastReceiver实现类
    private class StopListener extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 判断是否是充电器断开的广播
            if (Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction())) {
                // 停止当前服务
                stopSelf();
            }
        }
    }
}

2. 额外的注意点

  • 检查你的IntentFilter:你代码里的Intent.ACT...应该是没写完,断开充电器对应的正确Action是Intent.ACTION_POWER_DISCONNECTED,要补全哦。
  • 避免重复注册:如果你的Service可能被多次启动,建议在注册接收器前先判断listener是否为空,防止重复注册导致后续注销时报错。
  • 动态注册的接收器必须成对操作:注册和注销一定要对应,这是避免这类泄漏问题的基本原则。

简单来说,就是保证Service活着的时候接收器注册有效,Service销毁的时候接收器也跟着注销,这样就不会出现IntentReceiverLeaked的错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:47