Я новичок в RxJava, так что это, наверное, немой вопрос. Я расскажу о своем сценарии.
У меня есть некоторый код, запущенный в потоке пользовательского интерфейса, который будет обновлять некоторые изображения, но эти изображения не очень важны, и они потребляют немного ресурсов при их создании, поэтому я хочу сгенерировать их в одном потоке (а не в потоке пользовательского интерфейса курс) и генерировать их один за другим. Я предполагаю, что планировщик трамплинов - это то, что я хочу, но моя проблема в том, что если я его использую, то он работает над потоком пользовательского интерфейса, и я хочу, чтобы он делал это в другом потоке.
Очевидно, я могу написать свой собственный поток, в котором я могу помещать в очередь элементы, а затем обрабатывает их один за другим, но я подумал, может быть, у 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 thread?" всегда имеет значение true. Итак, как я могу сделать этот код и все последующие попытки сделать то же самое, что и в одном потоке (а не в потоке ui), чтобы не писать кучу кода для работы в очереди?
Edit:
Я считаю, что теперь это можно выполнить с помощью Schedulers.single()
, или если вы хотите использовать свой собственный, вы можете использовать new SingleScheduler()
. Я все еще тестирую, но я думаю, что он делает то, что мне нужно, когда я разместил это.