Android LocalBroadcastManager使用方法和代码流程分析 .
来源:互联网 发布:淘宝如何抢秒杀商品 编辑:程序博客网 时间:2024/06/05 08:31
一. 一. LocalBroadcastManager简介
LocalBroadcastManager是AndroidSupport包提供了一个工具,是用来在同一个应用内的不同组件间发送Broadcast的。
注意,这是同一个应用,也就是其他应用就算和你共进程,也是无法互相发送广播的。这点后面源代码流程分析的时候会说明。
使用LocalBroadcastManager有如下好处:
1. 1. 发送的广播只会在自己App内传播,不会泄露给其他App,确保隐私数据不会泄露
2. 2. 其他App也无法向你的App发送该广播,不用担心其他App会来搞破坏
3. 3. 比系统全局广播更加高效
那既然是同一个应用,为啥还要多此一举的使用LocalBroadcast呢,直接调用不可以么?
个人猜测这是Google从设计模式的角度去考虑的问题,使用本地广播可以让代码更好组织,耦合性更低。
二. 二. LocalBroadcastManager使用方法
1. 1. 获取LocalBroadcasetManager实例
LocalBroadcastManager lbm =LocalBroadcastManager.getInstance(this);
2. 注册广播接收器
三. 三. LocalBroadcastManager代码流程分析
1. 1. 获取LocalBroadcastManager实例
然后getInstance()方法里面使用同步方法,保证多线程环境下,单例模式不会出现问题。
从这点也可以看出LocalBroadcastManager是一个应用程序内有效,而不是进程内共享。
2. 2. 注册广播接收器
3. 3. 发送广播
发送广播分为两种,异步的和同步的;
异步广播的意思是发送广播完毕后,就直接返回,不需要等待广播执行。
那同步广播的意思就是相反,发送广播后,还需要等待广播接收器执行完onReceive方法。
首先看异步广播方法:
如果receivers != null,也就是找到了匹配的BroadcastReceiver,就发送一个消息MSG_EXEC_PENDING_BROADCASTS --- 执行等待中的Broadcast
代码如下:
同步广播的话实现方法相对简单,就是同步调用发送广播和回调广播方法,如下:
最后,献上源代码:
Android.rar (1.37 MB)
LocalBroadcastManager是AndroidSupport包提供了一个工具,是用来在同一个应用内的不同组件间发送Broadcast的。
注意,这是同一个应用,也就是其他应用就算和你共进程,也是无法互相发送广播的。这点后面源代码流程分析的时候会说明。
使用LocalBroadcastManager有如下好处:
1. 1. 发送的广播只会在自己App内传播,不会泄露给其他App,确保隐私数据不会泄露
2. 2. 其他App也无法向你的App发送该广播,不用担心其他App会来搞破坏
3. 3. 比系统全局广播更加高效
那既然是同一个应用,为啥还要多此一举的使用LocalBroadcast呢,直接调用不可以么?
个人猜测这是Google从设计模式的角度去考虑的问题,使用本地广播可以让代码更好组织,耦合性更低。
二. 二. LocalBroadcastManager使用方法
1. 1. 获取LocalBroadcasetManager实例
LocalBroadcastManager lbm =LocalBroadcastManager.getInstance(this);
2. 注册广播接收器
3. 2. 发送广播
这样在之前注册的广播接受方法onReceive就可以接收到发送的本地广播了。
三. 三. LocalBroadcastManager代码流程分析
1. 1. 获取LocalBroadcastManager实例
代码:
很明显的一个单例模式,静态的mInstance实例保证变量生命周期和应用程序进程一样。
然后getInstance()方法里面使用同步方法,保证多线程环境下,单例模式不会出现问题。
从这点也可以看出LocalBroadcastManager是一个应用程序内有效,而不是进程内共享。
2. 2. 注册广播接收器
这个方法可以简单的理解为把想要注册的Receiver以及它的IntentFilter保存在mReceivers这个HashMap里面;以及保存在mActions这个HashMap里面。mReceivers和mActions两个HashMap保存的东西是不同的。
3. 3. 发送广播
发送广播分为两种,异步的和同步的;
异步广播的意思是发送广播完毕后,就直接返回,不需要等待广播执行。
那同步广播的意思就是相反,发送广播后,还需要等待广播接收器执行完onReceive方法。
首先看异步广播方法:
这个方法的大概意思就是从mActions里面找到和当前Intent的action匹配的所有注册过的BroadcastReceiver,然后把他们添加到mPendingBroadcasts这个Hashmap里面.
如果receivers != null,也就是找到了匹配的BroadcastReceiver,就发送一个消息MSG_EXEC_PENDING_BROADCASTS --- 执行等待中的Broadcast
代码如下:
逻辑比较简单,不断处理mPendingBroadcasts这个Hashmap里面的BroadcastReceiver,回调BroadcastReceiver的onReceiver()方法,直到mPendingBroadcasts的size为0;
同步广播的话实现方法相对简单,就是同步调用发送广播和回调广播方法,如下:
至此,LocalBroadcastManager的使用方法,以及代码流程分析完毕。
最后,献上源代码:
Android.rar (1.37 MB)
0 0
- Android LocalBroadcastManager使用方法和代码流程分析 .
- Android 本地广播LocalBroadcastManager原理分析
- LocalBroadcastManager 的使用和源码分析
- Android LocalBroadcastManager
- Android LocalBroadcastManager
- Android中LocalBroadcastManager的基本用法及源码分析
- LocalBroadcastManager源码分析
- LocalBroadcastManager源码分析
- LocalBroadcastManager机制分析
- camera 流程分析和关键代码解释
- Android LocalBroadcastManager 注册广播和直接registerReceiver的区别
- Android LocalBroadcastManager 注册广播和直接registerReceiver的区别
- Android LocalBroadcastManager 注册广播和直接registerReceiver的区别
- Android LocalBroadcastManager与BroadcastReceiver
- Android 之LocalBroadcastManager
- Android LocalBroadCastManager简介
- android 中的LocalBroadcastManager
- Android Broadcast 与 LocalBroadcastManager
- 几个简单的jQuery使用方法
- IDEA 旗舰版 使用Maven创建Web工程 并部署tomcat
- Android系统启动过程
- lightoj 1067 - Combinations (组合数、乘法逆元)
- C++值的分类 —— 摘自维基百科
- Android LocalBroadcastManager使用方法和代码流程分析 .
- Java IO最详解
- spring-security + ldap的认证配置
- struts2 拦截器和actioninvocation
- MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile
- HDU2546 饭卡(01背包)
- SAPUI5用了哪些web技术?
- (转)CEPH命令
- scrapy安装使用教程