EventBus事件总线框架(发布者/订阅者模式,观察者模式)

一、 android应用内消息传递的方式:
1. handler方式-----------------不同线程间传递消息。
2. Interface接口回调方式-------任意两个对象。
3. Intent进行组件间通信,广播方式。


二、单例比较好的写法:
private static volatile EventBus defaultInstance;
构造函数应当是private,不应该是public

 1 public static EventBus getDefault() {
 2   if (defaultInstance == null) {
 3     synchronized (EventBus.class) {
 4       if (defaultInstance == null) {
 5         defaultInstance = new EventBus();
 6       }
 7     }
 8   }
 9   return defaultInstance;
10 }


双重检查锁(DCL)的方式,防止并发的问题,还能极大的提高效率。

三、EventBus3.0以前
1. 采用发布者/订阅者模式(观察者模式)设计的简化Activity、Fragment、Service、threads等之间通信的一种事件框架机制,
让代码简洁,耦合性更低。
2. 主要核心内容:注册(事件订阅)方法、事件发布方法、反注册(取消订阅)方法。

3. EventBus通过DCL单例获取一个实例 EventBus.getDefault();

EventBus一共提供了4种线程模型ThreadModel,分别是PostThread, MainThread, BackgroundThread, Async。
PostThread --------------默认实现,执行发生在发布事件的同一个线程;
MainThread --------------执行在UI主线程上;
BackgroundThread、Async---两个都是通过Executors.newCachedThreadPool()线程池来执行的。


Event事件,任意类型对象;
subsciber 事件订阅者,
publisher 事件发布者,EnentBus.post(Object)

EnventBus.getDefault()
EnventBus.getDefault().register()
EnventBus.getDefault().unregister()
EnventBus.getDefault().post(Object)
四、 EventBus3.0版本引入了注解来订阅处理函数
可以通过运行时注解+反射来获取订阅回调函数
也可以通过编译时@Subscribe注解生成class文件,编译时生成MyEventBusIndex类,该类中包含了List<SubscriberMethod>内容。

 

posted @ 2018-04-29 15:00  linghu_java  阅读(3191)  评论(0编辑  收藏  举报