接着之前说的rxjava代替eventBus的,现在大部分的项目都有使用retrofit+rxjava,所以为了方便,直接使用rxjava来代替eventbus事件总线.虽然这样有些不足的地方,但也是一个不错的方案…
#导入包
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
或者
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
#配置
public class RxBus {
private static volatile RxBus mDefaultInstance;//单例
private final Subject
建立一个统一事件类型类(一个用于存储传递数据的类,这里只存储一个字符串,可以传递更多信息)
public class EventSticky {
public String event;
public EventSticky(String event) {
this.event = event;
}
@Override
public String toString() {
return "EventSticky{" +
"event='" + event + '\'' +
'}';
}
}
#rxjava的使用
###订阅事件
private Subscription mRxSubSticky;//这里使用Subscription 来管理订阅者
private void subscribeEventSticky() {
if (mRxSubSticky != null && !mRxSubSticky.isUnsubscribed()) {
RxSubscriptions.remove(mRxSubSticky);//这里为解除订阅者
} else {
EventSticky s = RxBus.getDefault().getStickyEvent(EventSticky.class);//这里是测试获取到的事件
Log.i("FFF", "获取到StickyEvent--->" + s);
mRxSubSticky = RxBus.getDefault().toObservableSticky(EventSticky.class)
.subscribe(new RxBusSubscriber() {
@Override
protected void onEvent(EventSticky eventSticky) {
Log.e("FFF", "onNext--Sticky-->" + eventSticky.event);
if("img_head".equals(eventSticky.event)){
Log.w("---rxtest---",eventSticky.event);
}
if("getNewOrder".equals(eventSticky.event)){
Log.i("---接收发来的事件---",eventSticky.event);
}
if ("doneOrder".equals(eventSticky.event)){
Log.i("---接收发来的事件---",eventSticky.event);
}
if ("order".equals(eventSticky.event)){
Log.i("---接收发来的事件---",eventSticky.event);
}
if("img_head".equals(eventSticky.event)){
}
}
});
RxSubscriptions.add(mRxSubSticky);
}
}
###发起事件
RxBus.getDefault().postSticky(new EventSticky("getNewOrder"));
###解除订阅
RxSubscriptions.remove(mRxSubSticky);
RxBus.getDefault().removeAllStickyEvents();
#结尾吐槽
以上是本人项目中接触到的rxjava代替eventBus的方法,就是在订阅事件的时候,处理的多一些,其他的还是很好用的.和eventBus比较的话,rxjava适用于一个订阅者订阅一个事件,因为如果要订阅多个事件的话就要注册多次,而eventBus直接实现一个订阅者订阅多个事件…
###以上内容,纯属个人理解,如有错误,请指出纠正,若有雷同,你肯定在做梦~~~~