RxJava 单后台线程调度程序
2022-09-01 23:11:24
我对RxJava相当陌生,所以这可能是一个愚蠢的问题。我将描述我的场景。
我在UI线程上运行了一些代码,这些代码将更新一些图像,但这些图像不是很重要,它们在生成它们时会消耗一些资源,所以我想在单个线程(当然不是UI线程)上生成它们并逐个生成它们。我猜蹦床调度器是我想要的,但我的问题是,如果我使用它,那么它会在UI线程上完成工作,我希望它在另一个线程上完成。
显然,我可以编写自己的线程,我可以在其中对项目进行排队,然后它逐个处理这些线程,但我想也许RxJava会为我提供一个简单的解决方案?
我当前的代码如下所示:
Observable<Bitmap> getImage = Observable.create(new Observable.OnSubscribe<Bitmap>() {
@Override public void call(Subscriber<? super Bitmap> subscriber) {
Log.w(TAG,"On ui thread? "+ UIUtils.isRunningOnUIThread());
subscriber.onNext(doComplexTaskToGetImage());
subscriber.onCompleted();
}
});
getImage.subscribeOn(Schedulers.trampoline()).subscribe(new Action1<Bitmap>() {
@Override public void call(Bitmap bitmap) {
codeToSetTheBitmap(bitmap);
}
});
我的日志显示“在 ui 线程上?”始终为 true。那么,如何使该代码以及随后所有尝试在单个线程(而不是ui线程)上运行相同的操作,而无需编写一堆代码来排队?
编辑:
我相信这现在可以使用来完成,或者如果您想要自己的,则可以使用。我仍在测试,但我认为当我发布这个时,它做了我想要的。Schedulers.single()
new SingleScheduler()