我是RxJava的新手,我试图将RxJava用作事件总线。我使用了Kaushik Gopal(https://github.com/kaushikgopal/RxJava-Android-Samples/blob/master/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java)的RxJava示例。
这是我的RxBus代码
public class RxBus {
private static RxBus _instance;
private final Subject<Object, Object> _bus;
public static synchronized RxBus getInstance(){
if(_instance == null){
_instance = new RxBus();
}
return _instance;
}
private RxBus() {
_bus = new SerializedSubject<>(PublishSubject.create());
}
public void send(Object o) {
_bus.onNext(o);
}
public Observable<Object> toObserverable() {
return _bus;
}
public boolean hasObservers() {
return _bus.hasObservers();
}
}
我在另一个帖子上发帖但是我订阅了一个UI线程。这是我的订阅代码
public abstract class BaseActivity extends AppCompatActivity {
protected CompositeSubscription _subscriptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
_subscriptions = new CompositeSubscription();
...
}
@Override
protected void onResume() {
....
_subscriptions.add(RxBus.getInstance().toObserverable()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Object>() {
@Override
public void call(final Object event) {
//Do something here
}
}));
.....
}
@Override
protected void onPause() {
......
_subscriptions.unsubscribe();
}
}
当我第一次加载活动时,我确实收到了活动。但是如果我再次关闭并打开活动(触发onPause和onResume),我就会停止获取事件。我在这里错过了什么吗?这是将RxJava用于事件总线的正确方法吗?我再次发布在一个不同的线程,但我订阅了一个UI线程。感谢
答案 0 :(得分:2)
我想出了这个问题。不得不调用_subscriptions.clear()而不是_subscriptions.unsubscribe();