Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava2处理流的一部分_Java_Android_Rx Java2 - Fatal编程技术网

RxJava2处理流的一部分

RxJava2处理流的一部分,java,android,rx-java2,Java,Android,Rx Java2,我实现了以下行为: 演示者观察事件的用户界面 UI事件触发异步操作 异步操作完成后,结果将设置为ViewModel ViewModel被发送到视图以更新状态 这导致了单向数据流,易于管理 ViewModel和Presenter保留方向更改,状态不会丢失 我的实施: 演示者: public class Presenter { private final MainViewModel viewModel = new MainViewModel(); private final Inte

我实现了以下行为:

  • 演示者观察事件的用户界面

  • UI事件触发异步操作

  • 异步操作完成后,结果将设置为ViewModel

  • ViewModel被发送到视图以更新状态

  • 这导致了单向数据流,易于管理

    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));
        }
    
    }
    
    此实现工作正常,它作为一个流连接。 但是这段代码中有一个bug。在配置更改期间,异步操作的结果将丢失,因为flatMap中的流将与外部流一起处理

    在取消订阅视图“可观察”时,是否可以保持flatMap内的“可观察”处于活动状态?换句话说,仅在flatMap的上游进行处理


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

    配置更改是否真的意味着不再需要安装下游操作的结果?不,我需要在后台保存该任务,并无论如何检索操作的结果。例如,若你们想完成付款,并且你们旋转屏幕,你们需要得到关于付款操作结果的通知,否则你们将不知道实际发生了什么。这种操作不能重复。在这种情况下,我认为你的付款应该是独立的可观察的,而不是一个平面图。看看这个链接是否有帮助:好的,谢谢。实际上,我已经将其作为单独的流实现了,并且效果很好。我只是想确定没有更好的方法可以做到这一点。考虑到您的设置,我希望分离流实现是更好的方法。也许你不需要将它与所有类型的事件分开,但对于你描述的特定事件,它肯定是这样的。配置更改是否真的意味着你不再被安装在任何下游操作的结果中?不,我需要将该任务保存在后台,并无论如何检索操作的结果。例如,若你们想完成付款,并且你们旋转屏幕,你们需要得到关于付款操作结果的通知,否则你们将不知道实际发生了什么。这种操作不能重复。在这种情况下,我认为你的付款应该是独立的可观察的,而不是一个平面图。看看这个链接是否有帮助:好的,谢谢。实际上,我已经将其作为单独的流实现了,并且效果很好。我只是想确定没有更好的方法可以做到这一点。考虑到您的设置,我希望分离流实现是更好的方法。也许你不需要在所有类型的事件中都将其分开,但对于你描述的特定事件,它肯定是这样的。