Sono abbastanza nuovo per RxJava, quindi questa è probabilmente una domanda stupida. Sto per descrivere il mio scenario.Utilità di pianificazione a sfondo singolo RxJava
Ho del codice in esecuzione sul thread dell'interfaccia utente che aggiornerà alcune immagini ma quelle immagini non sono molto importanti e consumano un po 'di risorse durante la generazione, quindi voglio generarle su un singolo thread (non sul thread dell'interfaccia utente ovviamente) e generarli uno per uno. Immagino che lo scheduler del trampolino sia quello che voglio, ma il mio problema è che se lo uso, funziona sul thread dell'interfaccia utente e voglio farlo su un altro thread.
Ovviamente posso scrivere il mio thread in cui posso mettere in coda gli oggetti e poi li elabora uno per uno, ma ho pensato che forse RxJava avrebbe avuto una soluzione semplice per me?
mio codice attuale si presenta così: "Sul filo ui"
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);
}
});
mio registro che dice è sempre vero Quindi, come faccio a fare quel codice e tutti i successivi tentativi di eseguire la stessa cosa su un singolo thread (non sul thread ui) in ordine senza scrivere un mucchio di codice per accodarlo?
Edit:
Credo che questo può essere realizzato utilizzando Schedulers.single()
o se si desidera che il proprio è possibile utilizzare new SingleScheduler()
. Sto ancora testando, ma penso che faccia ciò che volevo quando l'ho postato.
http://reactivex.io/documentation/operators/subscribeon.html https://github.com/ReactiveX/RxAndroid – corsair992
Sto già utilizzando RxAndroid e il mio codice mostra che sto usando 'subscribeOn'. Non so proprio cosa passare a "subscribeOn" per fare ciò che voglio. – casolorz
È necessario iscriversi su un thread in background 'Scheduler' (la [' Schedulers' class] (http://reactivex.io/RxJava/javadoc/rx/schedulers/Schedulers.html) contiene metodi di factory static per crearli). Quindi è necessario osservare su un thread principale 'Scheduler', che può essere acquisito in RxAndroid tramite il metodo' AndroidSchedulers.mainThread() '. – corsair992