最近项目中,常用到广播,客户端与服务器通过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);
}
}