我实现了一个基于RxJava的简单事件总线和本文:http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/
一切正常,但我必须从一个适配器类中侦听/触发事件,该类由一个片段多次初始化。 因为我订阅了该适配器的每个实例,所以我的事件被多次触发,导致错误。
我想只订阅该适配器的一个实例,它必须是最后一个(不是第一个)。 那么有一种方法,如果生成适配器的新实例,我可以以某种方式检测我是否已经订阅并更新订阅(或删除该适配器的所有先前的实例并只订阅当前的那个)? 请注意我也在我的其他片段/服务中使用rxBus单例,所以我不能简单地完全重置它,因为我将丢失所有其他不是来自适配器的订阅。
这是我的公共汽车代码:
public class APIRxBus {
private static APIRxBus instance = null;
private final Subject<Object, Object> bus = new SerializedSubject<>(BehaviorSubject.create());
public static APIRxBus getInstance() {
if (instance == null){
instance = new APIRxBus();
}
return instance;
}
public void send(Object o) {
bus.onNext(o);
}
public Observable<Object> toObserverable() {
return bus;
}
}
以及我在适配器类中的订阅:
rxBus = APIRxBus.getInstance();
rxBus.toObserverable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Object>() {
@Override
public void call(Object event) {
if (event instanceof EVTSetPrintMode) {
//...
} else if (event instanceof EVTChangeDocumentImportance) {
//...
} else if (event instanceof EVTChangeDocumentVisibility) {
//...
}
}
});
答案 0 :(得分:1)
如果您可以告诉两个后续事件是否相同,则可以使用distinctUntilChanged(Func1)
,否则,您可以在几毫秒内尝试debounce()
。