android 广播的知识积累
16lz
2021-01-26
最近项目中,常用到广播,客户端与服务器通过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); } }
更多相关文章
- 由sqlite在手机上的存储位置,引发的onCreate在哪里执行的总结
- Android中ContentValues用法
- android基础知识05:四大组件之Broadcast Receiver
- 网络请求测试之HttpUrlConnection【Android】
- android系统之sensor学习
- android studio 如何清理没有用到的资源文件
- Android分页中显示出下面翻页的导航栏的布局实例代码
- Android如何通过content provider构建媒体文件数据库
- Android之Retrofit2.0 处理返回json报文并转换成bean对象