RxJava2处理流

时间:2017-10-01 19:50:12

标签: java android rx-java2

我已实施以下行为:

  1. Presenter会观察事件的用户界面

  2. UI事件触发异步操作

  3. 异步操作完成后,结果将设置为ViewModel。

  4. ViewModel被发送到View以更新状态

  5. 这会产生单向数据流 - 易于管理。

    ViewModel和Presenter在方向更改后存活,状态不会丢失。

    我的实施:

    主讲人:

    public class Presenter {
        private final MainViewModel viewModel = new MainViewModel();
        private final Interactor interactor;
        private final CompositeDisposable viewDisposables = new CompositeDisposable();
        private MainActivity view;
    
        public Presenter(Interactor interactor) {
            this.interactor = interactor;
        }
    
        void onCreateView(MainActivity view) {
            this.view = view;
            viewDisposables.addAll(onGetResult(), listenToViewModelUpdates());
        }
    
        void onDestroyView() {
            viewDisposables.clear();
            view = null;
        }
    
        private Disposable onGetResult() {
            return view.clickObservable()
                    .flatMap(__ -> Observable.fromCallable(interactor::doWork)
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread()))
                    .subscribe(result -> {
                        viewModel.result = result;
                        viewModel.sendUpdate();
                    });
        }
    
        private Disposable listenToViewModelUpdates() {
            return viewModel.observe().subscribe(viewModel -> view.update(viewModel));
        }
    
    }
    

    此实现工作正常,它作为一个流连接。 但是这段代码中有一个错误。在配置更改期间,异步操作的结果会丢失,因为flatMap中的流正在与外部流一起处理。

    在从Observable视图中取消订阅时,是否可以将flatservable保留在flatMap中?换句话说,只处理flatMap的上游?

    我创建了单独的流,一个用于异步任务,另一个用于观察视图,它符合我的所有要求,但它似乎是不洁净的设计。

0 个答案:

没有答案