我对 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 线程上?” 总是有真实的。那么如何使该代码和所有后续尝试在单个线程(而不是 ui 线程)上按顺序运行,而无需编写一堆代码来排队该工作?
编辑:
我相信这现在可以使用Schedulers.single()
或者如果你想要你自己的你可以使用来完成new SingleScheduler()
。我仍在测试,但我认为它可以满足我发布此内容时的要求。