在作项目的时候每每须要应用程序内各组件间、组件与后台线程间的通讯。好比耗时操做,等耗时操做完成后经过Handler或Broadcast将结果通知给UI,N个Activity之间须要经过Listener通讯,其实这些均可以经过EventBus轻松实现,EventBus经过发布/订阅(publish/subscribe)方式来管理事件总。EventBus经过注解和反射机制 将订阅者连同订阅函数保存起来,而后在发送订阅的时候 遍历订阅函数数组进行调用,其实从这方面就能够EventBus执行效率多少会受到一点影响。git
github地址:https://github.com/greenrobot/EventBusgithub
官网给出的各类角色的协做图数组
EventBus框架也是采用建造者模式设计的,能够经过EventBusBuilder来设置一些配置信息,例如设置debug模式下要抛出异常框架
以前作图片类项 的时候,须要处理一个点赞数据的同步,好比在做品的详情页点赞 须要同时更新列表页该做品的点赞数量,这里仍是以此为例。 函数
1.)build.gradle添加引用 post
compile 'org.greenrobot:eventbus:3.0.0'
2.)定义一个事件类型gradle
public class DataSynEvent { private int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
3.)订阅/解除订阅ui
订阅this
EventBus.getDefault().register(this);//订阅
解除订阅spa
EventBus.getDefault().unregister(this);//解除订阅
4.)发布事件
EventBus.getDefault().post(new DataSynEvent());
5.)订阅事件处理
@Subscribe(threadMode = ThreadMode.MAIN) //在ui线程执行 public void onDataSynEvent(DataSynEvent event) { Log.e(TAG, "event---->" + event.getCount()); }