RxJava Android线程样板

时间:2017-09-13 04:10:11

标签: android multithreading rx-java rx-android rx-java2

前几天我遇到了踩踏问题。我在想rxJava线程是如何工作的。这段代码不想在另一个线程上运行。

     mAPIInterface.getAllProjects(accessToken)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Project>>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {
                    mView.showLoadProgress();
                }

                @Override
                public void onNext(@NonNull List<Project> allProjects) {
                    projects = allProjects;
                    mView.hideLoadProgress();
                    mView.onProjectsLoaded();
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    mView.hideLoadProgress();
                    mView.onProjectsLoadError();
                }

                @Override
                public void onComplete() {

                }
            });

然后我找到了解决方案,但我仍然不确定它是否正常。看起来有一些更好的解决方案:

     mAPIInterface.getAllProjects(accessToken)
            .subscribeOn(Schedulers.newThread())
            .map(new Function<List<Project>, List<Project>>() {
                @Override
                public List<Project> apply(@NonNull List<Project> projects) throws Exception {
                    return projects;
                }
            })
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Project>>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {
                    mView.showLoadProgress();
                }

                @Override
                public void onNext(@NonNull List<Project> allProjects) {
                    projects = allProjects;
                    mView.hideLoadProgress();
                    mView.onProjectsLoaded();
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    mView.hideLoadProgress();
                    mView.onProjectsLoadError();
                }

                @Override
                public void onComplete() {

                }
            });

使用map()中间件可行。但是,每当我需要在另一个线程上运行该进程时,我是否应该使用它?

0 个答案:

没有答案