eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。后面介绍使用了观察者模式的RxJava,RxAndroid。github地址:https://github.com/greenrobot/EventBus。
eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。后面介绍使用了观察者模式的RxJava,RxAndroid。github地址:https://github.com/greenrobot/EventBus。
一,EventBus 总体概括
EventBus有如下特点:
- 简化了android各组件之间的通信。
- 适用于Activities,Fragments以及后台进程。
- 避免了复杂的,潜在的依赖错误和生命周期的问题。
- 让代码更简洁。
- 响应快速,jar包小。
- 有1亿以上的APP应用了enventBus
- 在跨进程通信,订阅者优先级方面表现优异。
二,EventBus的使用三部曲
EventBus的使用非常简单,定义事件event,注册订阅者,发送事件。1,定义事件
所谓的event,其实也就是一个对象,里面携带了需要传递的信息。
1 2 3 4 5 6 7 8 9 10 11
| public class MessageEvent { } private String msg; public MessageEvent(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }
|
2,注册/取消订阅者
准备订阅者,在onCreate方法或者构造方法里面注册subscribers。取消注册在onStop中调用unregister即可。
1 2 3 4 5 6 7 8 9 10 11 12
| @Override protected void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); EventBus.getDefault().unregister(this); }
|
只是注册了订阅者还不行,还需要定义事件的接收者,处理事件。
1 2 3 4 5 6 7 8 9 10 11 12
| public void onEvent(String event){ mShowInfo1.setText(event); } public void onEvent(MessageEvent event){ mShowInfo21.setText(event.getMsg()); } public void onEventMainThread(Integer event) { mShowInfo2.setText(event+""); }
|
3,发送事件
eventBus.post(event);就可以发送事件,对应的subscribers会在onEvent里面处理这个事件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| EventBus.getDefault().post("duqian test!"); EventBus.getDefault().post(new MessageEvent("type")); int mCount = 0; new Timer().schedule(new TimerTask() { @Override public void run() { EventBus.getDefault().post(mCount); if (mCount >= 3) { this.cancel(); mCount = 0; } mCount++; } }, 0, 1000);
|
三,总结
EventBus是android平台性能极佳的事件总线,简化了 Activities, Fragments, Threads, Services等组件的通信,最少的代码,最佳的质量。
简单分享下使用,未完待续,欢迎交流。杜乾,Dusan,Q 291902259