Mi sento come se qualcuno avesse provato questo, ma non riesco a capire un modo carino di fare qualcosa se un osservabile richiede molto tempo.Come si mostra lo spinner se RxJava osservabile richiede troppo tempo?
Questo è il flusso che voglio.
Start a search.
If the search takes longer than some time,
show a spinner or show progress bar.
When finished do subscription action and hide spinner/progress bar.
Il più vicino mi viene in mente è come uno Zip
manager.search(searchTerm)
.zip(Observable.Timer(1, TimeUnit.SECONDS))
.subscribe(
// if the search is non null then we are good
// if the long time is non 0 we need to show spinner
);
C'è qualcosa di meglio da fare? Ho provato tutto il giorno senza successo. In un mondo perfetto mi sento come vorrei qualcosa di simile
manager.search(searchTerm)
.timeout(i -> /* do timeout stuff */, 1, TimeUnit.SECONDS)
.subscribe(item -> /* do search result stuff */);
Dalla documentazione di 'BlockingObservable':" Ma è generalmente inappropriato per le applicazioni di produzione (se pensi di aver bisogno di usare un BlockingObservable questo di solito è un segno che dovresti ripensare alla tua progettazione). " Quindi quando si usa il blocco osservabile appropriato e quando no? – Than
Direi che è ok usare BlockingObservable in alcuni casi, quando migliora davvero la leggibilità del tuo codice. – scana
Ho usato 'BlockingObservable' qui a scopo dimostrativo, quindi l'app non si chiude prima di vedere tutte le linee di stampa. In produzione, non chiamare "toBlocking" e basta. – akarnokd