Rxjava事件总线再次订阅恢复不工作

时间:2016-07-13 21:53:11

标签: rx-java event-bus

我是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线程。感谢

1 个答案:

答案 0 :(得分:2)

我想出了这个问题。不得不调用_subscriptions.clear()而不是_subscriptions.unsubscribe();