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






更多相关文章

  1. 由sqlite在手机上的存储位置,引发的onCreate在哪里执行的总结
  2. Android中ContentValues用法
  3. android基础知识05:四大组件之Broadcast Receiver
  4. 网络请求测试之HttpUrlConnection【Android】
  5. android系统之sensor学习
  6. android studio 如何清理没有用到的资源文件
  7. Android分页中显示出下面翻页的导航栏的布局实例代码
  8. Android如何通过content provider构建媒体文件数据库
  9. Android之Retrofit2.0 处理返回json报文并转换成bean对象

随机推荐

  1. android 短信拦截
  2. Android逆向基础之Dalvik指令集
  3. 优化布局在Android–减少过度渲染
  4. Android解析聚合数据之天气预报API
  5. Android studio的点击事件
  6. Android调用Jni,非常简单的一个Demo
  7. Android学习备忘022——FBReader源码解析
  8. Android spinner 动态添加时报错 java.la
  9. 7.1 DropTargetBar style
  10. Android adb命令启动系统组件