Ser*_*nov 4 android rx-java rx-android
我之前曾经使用过EventBus,它易于使用且易于理解.但是,这一次,我想尝试使用RxJava进行类似事件总线的通信,但是不清楚如何从RxJava中删除事件,或者更好的说,它应该如何正确设计以具有与EventBus类似的行为我打电话的时候removeStickyEvent?
在RxJava中,即使我订阅了这个observable,我也可以使用BehaviorSubject来回复,但是当处理这个事件时我该怎么办?如果我不想让这个事件再次播放怎么办?
例如,一个片段触发事件然后结束.另一个片段侦听此事件并处理它.然后,如果此应用程序从不同的情况再次触发"另一个"活动,那么它将再次订阅相同的BehaviorSubject并将再次处理该陈旧事件,这不是我想要实现的.
只要你不打算让自己events成为现实null,我认为这很容易实现.
完全按照你说的,你可以使用BehaviorSubject传播sticky的事件,当你想removeStickyEvent从bus,你可以只发出null对象(以"刷新"了subject).
像这样的东西(从我的头顶 - 没有测试,没有泛型,只是一个简单的Object基于事件的例子):
public class RxEventBus {
PublishSubject<Object> eventsSubject = PublishSubject.create();
BehaviorSubject<Object> stickyEventsSubject = BehaviorSubject.create();
public RxEventBus() {
}
public Observable<Object> asObservable() {
return eventsSubject;
}
public Observable<Object> asStickyObservable() {
return stickyEventsSubject.filter(new Func1<Object, Boolean>() {
@Override
public Boolean call(Object o) {
return o != null;
}
});
}
public void postEvent(@NonNull Object event) {
eventsSubject.onNext(event);
}
public void postStickyEvent(@NonNull Object stickyEvent) {
stickyEventsSubject.onNext(stickyEvent);
}
public void removeStickyEvent(){
stickyEventsSubject.onNext(null);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |