2016-06-03 2 views
0

Как я могу выполнить этот код в фоновом потоке?Schedulers.computation() выполнен на MainThread

.subscribeOn(Schedulers.computation()) 

onNext() 
{ 
    touchEverythingInTheUiThreadFromBackgroundThread(); 
} 
+1

Не могли бы вы поделиться больше кода? Каков источник событий? Вы не путаете 'subscribeOn' с' observOn'? – akarnokd

+0

Сначала задайте вопрос, удалите мусор – AlBlue

ответ

0

Использование

Observable.fromCallable(() -> Thread.currentThread().getName()) 
      .subscribeOn(Schedulers.computation()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(name -> Timber.d("Worker thread: %s, Handle thread: %s", name, Thread.currentThread().getName())); 
1

Если вы хотите быть уверены, что ваш .doOnNext() выполняется на указанном планировщиком, а затем изменить ваш .subscribeOn() к .observeOn(). Интуитивно .observeOn() определяет, какой планировщик используется для всего, что приходит после этого.

.subscribeOn() влияет только на то, что планировщик используется для запуска onSubscribe() метод вашего наблюдаемого создания. То, что происходит позже, в значительной степени зависит от того, что именно вы подписываетесь или как @akarnokd ставит его: что является источником ваших событий. Небезопасно предполагать, что элементы будут отправляться в планировщик, указанный в .subscribeOn(). На самом деле существует, по крайней мере, несколько примеров, когда эти предположения не выполняются.