EventBus是什么?
EventBus,顾名思义,是“事件总线”的意思。更具体的说是一个针对Java和Android的事件发布/订阅框架(EventBus is a publish/subscribe event bus for Android and Java.)
GitHub地址:https://github.com/greenrobot/EventBus
图示:
EventBus的使用
1.定义事件
public class MessageEvent { private String name; public MessageEvent(String name) { this.name = name; } @Override public String toString() { return "MessageEvent{" + "name='" + name + '\'' + '}'; } }
2.订阅
普通订阅:
需要先进行注册,然后在有相对应的信息发出时,可以获取到信息。
//注册和移除需要确定在哪个生命周期进行 //注册 EventBus.getDefault().register(this); //移除 EventBus.getDefault().unregister(this); //事件处理: //threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC) @Subscribe(threadMode = ThreadMode.MAIN) public void MessageEventBus(MessageEvent event) { tvEventbusResult.setText(event.toString()); }
粘性订阅
不需要先注册,当已粘性信息发出在前,注册时即收到信息。
//注册和移除需要确定在哪个生命周期进行 //注册 EventBus.getDefault().register(this); //移除 EventBus.getDefault().removeAllStickyEvents(); EventBus.getDefault().unregister(this); //事件处理: //threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC) @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void MessageEventBus(MessageEvent event) { tvEventbusResult.setText(event.toString()); }
3.发送事件
//发送普通事件 EventBus.getDefault().post(new MessageEvent("普通事件")); //发送粘性事件 EventBus.getDefault().postSticky(new MessageEvent("粘性事件"));
EventBus原理
EventBus运用注解和反射技术,发布/订阅模式、单例模式,通过一系列的操作,实现消息的发送和接收(具体见EventBus源码)
思考:
结合github上EventBus的介绍,和一些具体介绍EventBus使用的博客,并进行一定的编码测试,可以做到对EventBus的初步了解和使用。
深入了解的话,还是要结合源码,一点点分析其设计思想和使用到的语言相关技术和设计模式等。
知其然易,知其所以然难。
--End