是否有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());
}
有人有更好的解决方案吗?谢谢。
答案 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();