Sto usando RxAndroid per le operazioni di streaming. Nel mio caso d'uso reale, sto recuperando un elenco dal server (usando Retrofit). Utilizzo gli scheduler per eseguire il lavoro su un thread in background e ottenere l'emissione finale sul thread (principale) dell'interfaccia utente Android.Process Observable on background thread
Questo funziona bene per la chiamata di rete, tuttavia mi sono reso conto che i miei operatori dopo la chiamata di rete non utilizzano il thread in background, ma ricevono il richiamo sul thread principale.
myService.fetchSomeIntegersFromServer()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.filter(integer -> {
System.out.println(Looper.getMainLooper().getThread() == Thread.currentThread());
return true;
})
.subscribe(integer1 -> {});
Come posso essere sicuro che tutte le operazioni siano eseguite su un thread in background?
Grazie per la risposta dettagliata! C'è un modo per definire gli scheduler all'inizio della catena di chiamata del metodo (come nell'OP)? – WonderCsabo
Gli osservabili seguono [Decorator Pattern] (https://en.wikipedia.org/wiki/Decorator_pattern), quindi in base alla progettazione, ciò non è possibile. 'observOn' (e gli altri metodi) non restituiscono la stessa istanza' Observable' come fa il builder pattern, ma restituiscono invece un _new_ 'Observable'' wrapping 'il' vecchio ''Observable'. – nhaarman
Lo capisco. Questo è un peccato per il caso, perché ciò significa che devo aggiungere la chiamata 'observOn()' a ogni stream che scrivo? :( – WonderCsabo