Пытаюсь заменить EventBus на RxAndroid.
Я хочу, чтобы страничные фрагменты подписывались / отказывались от подписки на источник событий, эти фрагменты создаются и отбрасываются относительно быстро, в зависимости от того, как быстро пользователь переходит на новую страницу.
В EventBus я смог добавить декорированный метод обратного вызова (т.е. @Subscribe(threadMode = ThreadMode.MAIN)
) и зарегистрировать / отменить регистрацию в методах onStart / onStop фрагмента.
С помощью RxJava2 я теперь создаю объект PublishSubject
в классе
public static PublishSubject<List<Long>> m_psUpdatedDays = PublishSubject.create();
public static void publishUpdatedDays(List<Long> lDay) {
m_psUpdatedDays.onNext(lDay);
}
и подпишитесь на этого издателя в другом классе, вызвав следующее в методе onStart
фрагмента:
m_psUpdatedDays.observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<Long>>() {
@Override public void onSubscribe(Disposable d) {}
@Override public void onNext(List<Long> longs) {
...
Update Fragment UI here
...
}
@Override public void onError(Throwable e) {}
@Override public void onComplete() {}
});
У меня вопрос: как я могу отказаться от подписки на этого нового наблюдателя, когда система вызывает метод onStop
фрагмента?
Нужно ли мне сохранять объект Disposable
, который я получаю в onSubscribe
, а затем вызывать .dispose()
для него в методе onStop
?