是否有Handler.runWithScissors(final Runnable r,long timeout)的RxJava(Rxandroid)等效项?

时间:2019-01-29 02:10:00

标签: android rx-java2

是否有Handler.runWithScissors(final Runnable r,long timeout)的RxJava(Rxandroid)等效项?

我有一个问题,要在workerThread中异步获取长时间运行的结果。 (mApplication.startApp()

同时,通知uiThread中的进度,我的解决方法如下:


/**
 * @return Observable<String> that subscribe the progress.
 */
public Observable<String> startApp() {
        Subject<String> mAppState = BehaviorSubject.create();

        Observable.just("Initialize...")
                .observeOn(mSchedulerProvider.single())
                .doOnNext((state) -> {
                    mAppState.onNext(state);
                    mApplication.startApp();
                })
                .doOnError((error) -> mAppState.onError(error))
                .map((state) -> "Initialization Complete.")
                .doOnNext((state) -> {
                    TimeUnit.MILLISECONDS.sleep(1000);
                    mAppState.onNext(state);
                    mAppState.onComplete();
                })
                .compose(bindToLifecycle())
                .subscribe();

        return mAppState.compose(bindToLifecycle())
                .observeOn(mSchedulerProvider.ui());
    }

有人有更好的解决方案吗?谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您没有一个简单的解决方案,您的解决方案就很棒 当您在计算或io中完成工作时,每1秒更新一次ui

    Observable.just(1)
            .observeOn(Schedulers.computation())
            .map(integer -> {
                // do your long job or computation
                return integer;
            })
            .skip(1, TimeUnit.SECONDS)
            .observeOn(AndroidScheduler.mainThread())
            .map(o -> {
                //UI update
                return o;
            }).subscribe();