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

        }

    }






你可能感兴趣的:(Android)