Wie kann ich diesen Code im Hintergrund Thread ausführen?Schedulers.computation() wird auf MainThread ausgeführt
.subscribeOn(Schedulers.computation())
onNext()
{
touchEverythingInTheUiThreadFromBackgroundThread();
}
Wie kann ich diesen Code im Hintergrund Thread ausführen?Schedulers.computation() wird auf MainThread ausgeführt
.subscribeOn(Schedulers.computation())
onNext()
{
touchEverythingInTheUiThreadFromBackgroundThread();
}
Verwenden
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()));
Wenn Sie sicher sein wollen, wird Ihre .doOnNext()
auf dem angegebenen Scheduler ausgeführt wird, dann ändern .subscribeOn()
-.observeOn()
. Intuitiv bestimmt .observeOn()
, welcher Scheduler für alles verwendet wird, was danach kommt.
.subscribeOn()
betrifft nur, welcher Scheduler verwendet wird, um onSubscribe()
Methode Ihrer beobachtbaren Erstellung auszuführen. Was später passiert, hängt stark davon ab, was genau du abonnierst oder wie @akarnokd es ausdrückt: Was ist die Quelle deiner Ereignisse? Es ist nicht sicher anzunehmen, dass Elemente auf dem Scheduler ausgegeben werden, der in .subscribeOn()
angegeben ist. Tatsächlich gibt es zumindest ein paar Beispiele, wo diese Annahmen nicht gelten.
Können Sie mehr Code teilen? Was ist die Quelle von Ereignissen? Verwechseln Sie 'subscribeOn' nicht mit' observeOn'? – akarnokd
Frage zuerst, beseitigte Müll – AlBlue