android 广播的知识积累

最近项目中,常用到广播,客户端与服务器通过socket传输数据,要用广播将数据从service传值到各个页面,用到广播用到最多的是本地广播,好处就是外部程序不能监听到。体现数据的安全性

        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
        localBroadcastManager.registerReceiver(receiver, filter);
写法很简单,但我遇到的问题是发送的一条广播,广播接收器里接受了多次

百度原因:1.注册了多次,2.receiver存在多个

我的问题产生情境:activity1里有一个列表,点击item进入activity2,点击activity2里的按钮,发送socket给服务器,服务器返回数据通过广播传递,监听到数据进入activity3。

第一次回退时activity3——activity2——activity1

再操作一遍流程,发现activity3出现两次,也就是广播接受了多次。

一个假设:当activity2注册本地广播,并接收到广播跳转到activity3时,即使activity2销毁了,只要广播没有取消注册,广播接收者就存在着,这也导致了第二次操作时,receiver存在了多个。

解决办法:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Logger.i("RollCallActivity:::");
       // activityUtils.removeActivity("RollCallActivity");
        if (receiver!=null){
            App.localBroadcastManager.unregisterReceiver(receiver);

        }

    }






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值