EventBus,RxBus相关介绍
来源:互联网 发布:oracle数据库命令大全 编辑:程序博客网 时间:2024/06/05 05:16
eventBus是一个主要用于事件的发布和订阅的框架,是一个发布 / 订阅的事件总线,包含4部分:发布者,订阅者,事件,总线。RxBus是一种开发思想,使用了观察者模式的RxJava,RxAndroid实现,使用方式差不多。github地址:
EventBus https://github.com/greenrobot/EventBus
RxBus https://github.com/AndroidKnife/RxBus
一,EventBus 总体概括
EventBus有如下特点:
- 简化了android各组件之间的通信。
- 适用于Activities,Fragments以及后台进程。
- 避免了复杂的,潜在的依赖错误和生命周期的问题。
- 让代码更简洁。
- 响应快速,jar包小。
- 有1亿以上的APP应用了enventBus
- 在跨进程通信,订阅者优先级方面表现优异。
二,EventBus的使用三部曲
EventBus的使用非常简单,定义事件event,注册订阅者,发送事件。
1,定义事件
所谓的event,其实也就是一个对象,里面携带了需要传递的信息。
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即可。
@Override protected void onStart() { super.onStart(); //注册EventBus EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); //取消EventBus EventBus.getDefault().unregister(this); }
只是注册了订阅者还不行,还需要定义事件的接收者,处理事件。
//事件1接收者:在主线程接收 public void onEvent(String event){ mShowInfo1.setText(event); } //事件2接收者:在主线程接收自定义MessageEvent消息 public void onEvent(MessageEvent event){ mShowInfo21.setText(event.getMsg()); } //事件3接收者:在主线程接收 public void onEventMainThread(Integer event) { mShowInfo2.setText(event+""); }
3,发送事件
eventBus.post(event);就可以发送事件,对应的subscribers会在onEvent里面处理这个事件。
//事件1发送者:在主线程发送 EventBus.getDefault().post("duqian test!"); //事件2发送者:在主线程发送自定义MsgBean消息 EventBus.getDefault().post(new MessageEvent("type")); //事件3发送者:在子线程发送 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);
三,RxBus
Rxbus使用方式和EventBus一样,在oncreate 或者 onResume等地方注册,和取消注册(如onPause和onDestroy),在初始化同时,可以指定接收后所运行的线程。RxBus的思想是使用 RxJava 来实现了 EventBus ,而不再需要使用OTTO或者 GreenRobot 的EventBus。
1,注册事件,register
Observable<UserBean> observable = RxBus.getInstance().register(this);observable.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<UserBean>() { @Override public void call(UserBean userBean) { Log.d("Test", "received :" + userBean.toString()); }});
2,取消注册,unregister
RxBus.getInstance().unregister(this);
3,发送事件,Post
RxBus.getInstance().post(new UserBean("rxbus", 291902259));
四,总结
EventBus,RxBus是android平台性能极佳的事件总线,简化了 Activities, Fragments, Threads, Services等组件的通信,最少的代码,最佳的质量。
RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。
如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合retrofit可以很轻松的完成网络的访问。
EventBus有个缺点,使用了EventBus的类都不能进行混淆,否则Evnetbus就找不到OnEvent方法了。
推荐使用RxJava/RxAndroid。看我的另一分享:
RxJava+Retrofit+Gson实现网络请求
简单分享下使用,未完待续,欢迎交流。杜乾,Dusan,Q 291902259
- EventBus,RxBus相关介绍
- RxBus 替换EventBus
- EventBus替代品, RxBus.
- RxBus----Rxjava实现EventBus
- Android EventBus , RxBus
- RxBus对比EventBus
- 实现RxBus代替EventBus
- EventBus和RxBus基本原理
- RxJava和RxBus代替EventBus
- 用RxBus替代EventBus、Otto
- RxBus完全一样的 EventBus
- 简单使用RxBus替代EventBus
- RxBus-实现EventBus之Sticky
- RxJava使用示例: 实现Rxbus代替eventbus
- Rxjava——使用RxBus替换EventBus
- RxBus真的能替代EventBus吗?
- EventBus介绍
- EventBus介绍
- 异常 axis2服务的webservice 改造让其被dubbo监控
- JAVA ArrayList
- Quartz
- ZOJ - 3879 Capture the Flag (模拟)题意难懂的水题
- eclipse 创建 maven springmvc工程
- EventBus,RxBus相关介绍
- 太阳高度角/方位角计算公式
- 平衡二叉树Java语言实现
- Java中ThreadLocal的使用(转载)
- Topic 2
- hdu1312简单bfs
- 系统架构设计——学习篇之类的设计(UML)
- Python-sorted与sort,以及模拟内置函数sorted()
- 警告 spring boot 加载beans的顺序