Receiver not registered: ***.***.***.***Activity$Socket 报错处理

Receiver not registered: ***.***.***.***Activity$Socket 报错处理。

顾名思义:Receiver 未注册,调用unregisterReceiver就会保错

通常出现这个问题有以下情况:

第一种:Receiver真的没有注册,不存在。

第二种:conext.unregisterReceiver和conext.registerReceiver的context不匹配。这个可以在注册之后,调用unregisterReceiver调试以下,一般使用全局的getApplicationContext就行了。

第三种:多次调用unregisterReceiver导致。一次unregisterReceiver,只能调用一次unregisterReceiver

    private boolean mReceiverTag = false;   //广播接受者标识
    private SocketMessageReceiver socketMessageReceiver;

    /**
     * 动态注册广播
     */
    public void doRegisterReceiver() {
        if (!mReceiverTag) {     //在注册广播接受者的时候 判断是否已被注册,避免重复多次注册广播
            socketMessageReceiver = new SocketMessageReceiver();
            IntentFilter filter = new IntentFilter("com.xch.servicecallback.content");
            mView.registerReceiver(socketMessageReceiver, filter);
            mReceiverTag = true;    //标识值 赋值为 true 表示广播已被注册
        }
    }

    /**
     * 注销广播
     */
    public void unRegisterReceiver(){
        if (mReceiverTag) {   //判断广播是否注册
            mView.unregisterReceiver(socketMessageReceiver);
        }
    }

    // 接受webSocket onMessage中定义的广播消息
    private class SocketMessageReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String message = intent.getStringExtra("message");

            Log.d("Test", "SocketMessageReceiver start");
            if (!StringUtil.isNullOrEmpty(message)) {
                Log.d("Test", "SocketMessageReceiver--onReceive接收到服务器传来的消息===" + message);
                JSONObject result = null;
                try {
                    result = new JSONObject(message);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                if (result != null) {
                    if (result.has("webSocketConn")) {
                        // socket 下发的消息
                    }else if (result.has("status")){
                        String status = "";
                        try {
                            status = result.getString("status");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

注意:动态注册的广播,结束activity的时候一定要注销广播。即:registerReceiver 和 unregisterReceiver 成对存在。如果只注册,不注销,未回收的BroadcastReceiver可能引起内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值