Intereting Posts
SetBackgroundResource () отбрасывает мои атрибуты макета XML Пользователи приложений Android Получают «Приложение не установлено» при попытке обновления Я обновил Android от targetSdk 22 до 23, и я получаю NoSuchMethodError. Как я могу это исправить? Как изменить значок приложения Android в Eclipse? Как сделать grid-view горизонтально прокручиваемым в android Хорошие инструменты для разработки графического интерфейса в Android? Настроить Slidemenu – пример не работает Как изменить цвет панели заголовка и адресной строки в новейшей версии Android Chrome на Lollipop? Сколько типов контекста в android и что лучше использовать Gps статус включен / отключен широковещательный приемник Запись обратно совместимого кода Android SQLite Delete Cascade не работает Android In App Subscription всегда возвращает начальную квитанцию, я никогда не получаю обновление Разный размер текста для разных аппаратных средств Ленивая загрузка изображений в ListView

Планировщик одиночных потоков RxJava

Я довольно новичок в 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), чтобы не писать кучу кода для работы в очереди?

Solutions Collecting From Web of "Планировщик одиночных потоков RxJava"

Вы можете создать один многоразовый поток для создания Scheduler для Observable одним из следующих способов:

  • Создайте ThreadPoolExecuter с размером пула 1 ( Executors.newSingleThreadExecutor() является удобным статическим заводским методом для этого), а затем используйте его для создания планировщиков с помощью метода Schedulers.from() .
  • RxAndroid предоставляет настраиваемую реализацию Scheduler которая использует Handler для планирования действий и, следовательно, может использоваться с любым Thread который работает Looper , передавая его Handler AndroidSchedulers.handlerThread() фабрики AndroidSchedulers.handlerThread() .

Обратите внимание, что вам нужно будет наблюдать за Scheduler основного потока, если вы будете взаимодействовать с пользовательским интерфейсом при завершении этих задач.

В RxJava 2 вы можете использовать Schedulers.single() который:

Возвращает стандартный экземпляр Scheduler по умолчанию, общий и однопоточный, для работы, требующей строгого последовательного выполнения в том же фоновом потоке.

Дополнительную информацию см. В документации .

Я не вижу его в документации RjJava 1 Schedulers .