c'è comunque da dire a java rx di usare il thread corrente nella funzione observOn? Sto scrivendo il codice per Android Syncadapter e voglio che i risultati vengano osservati nel thread dell'adattatore di sincronizzazione e non nel thread principale.Come osservare il thread chiamante in java rx?
Una chiamata rete di esempio con Retrofit + RX Java sembra qualcosa di simile:
MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(<current_thread>)
.subscribe(new Subscriber<Object>() {
//do stuff on the sync adapter thread
}
Ho provato ad utilizzare utilizzando
...
.observeOn(AndroidSchedulers.handlerThread(new Handler(Looper.myLooper())))
...
che è allo stesso modo rx Android crea lo scheduler per il thread principale ma non funziona più appena sostituisco Looper.myLooper()
per Looper.getMainLooper()
.
Potrei usare Schedulers.newThread() ma come il suo complesso codice di sincronizzazione con molte chiamate al server creerò costantemente un nuovo thread solo per sparare nuove chiamate di rete che creano nuovamente nuovi thread per avviare più chiamate di rete . C'è un modo per fare questo? O il mio approccio è completamente sbagliato?
Questo è un po 'speculativa, quindi non sto postando questo come un risposta: Dalla versione 2.0-beta2 in poi, Retrofit non mette più la richiesta di rete su un thread diverso - vedi qui: https://github.com/square/retrofit/commit/38ce2bee70342ac1ab08115d74802d3a54d85511 Quindi, se stai usando una versione corrente di Retrofit dovresti essere in grado di saltare il solo 'subscribeOn' e' observOn' e rimanere sul thread dell'adattatore di sincronizzazione per tutto il tempo. Oppure ho frainteso la tua domanda e vuoi creare nuovi thread, ma dovrebbero semplicemente tornare tutti alla discussione da cui hai iniziato? –