本地广播LocalBroadcastManager
说到组件间通信第一个肯定想到广播BroadcastReceiver,但是这里要说的是一个更优的选择---本地广播LocalBroadcastManager;
优点:只在app内传播,信息不会泄露,也不会被别人的广播干扰,且比全局广播更高效;缺点:但是本地广播传输消息时将一切都交给系统负责,无法干预传输中的步骤;使用观察者模式使用demo:
本质:看一下LocalBroadcastManager源码
事件总线
组件化层级障碍:由组件化架构图可以看出,组件间相互独立,没有依赖,也就没有关系,也就无法传递信息,那么要如何交流呢?
这时就需要用到基础层basemodule,因为组件层的模块都依赖于基础层;
事件总线Android中activity,fragment,service间信息传递相对复杂,如果用系统级别的广播,有耗时,容易被捕捉,无法干预,可传输数据类型少等弊端,
于是大佬们就搞出了事件总线;
下面是三种目前常用的事件总线框架:
1.EventBus:
一款针对Android优化的发布/订阅事件总线,主要功能是替代handler,intent,broadcast;
优点是开销小,代码优雅,将发送者和接收者解耦;
EventBus2.x的版本和3.x是有很大区别的:
1.2.x使用的是运行时注解,采用了反射的方式对整个注册的类的所有方法进行扫描来完成注册,因而会对性能有一定影响;
2.3.x使用的是编译时注解,Java文件会编译成.class文件,再对class文件进行打包等一系列处理。在编译成.class文件时,EventBus会使用EventBusAnnotationProcessor注解处理器读取
Subscribe()注解并解析、处理其中的信息,然后生成Java类来保存所有订阅者的订阅信息。这样就创建出了对文件或类的索引关系,并将其编入到apk中。3.从EventBus3.0开始使用了对象池缓存减少了创建对象的开销。EventBus给Android开发者世界带来了一种新的框架和思想,就是消息的发布和订阅。这种思想在其后很多框架中都得到了应用。
2.RxBUs
RxBus不是一个库,而是一个文件,实现只有短短30行代码。RxBus本身不需要过多分析,它的强大完全来自于它基于的RxJava技术。
RxBus有很多实现,如:
AndroidKnife/RxBus(
转载请注明:http://www.0431gb208.com/sjslczl/2025.html