2015-08-27 9 views
29

Ho letto here che è possibile utilizzare una cache globale per gestire la rotazione.Come gestire la rotazione con Retrofit e RxJava/RxAndroid in Activity?

È possibile evitare questo utilizzando la cache o riprodurre operatori osservabile, mentre assicurandosi che la Observable sopravvive in qualche modo il ciclo di vita di attività (per esempio, memorizzando in una cache globale, in un frammento, ecc)

Ma come raggiungerlo? Qualcuno può indicarmi un esempio su come farlo? O forse conosci qualche approccio migliore per gestire il cambio di configurazione?

EDIT:

Per ora ho trovato molti modi, ma ho finito con l'utilizzo di RxBus realizzazione. Un bell'esempio di utilizzo di RxBus è possibile trovare here.

risposta

5

Ho creato un'applicazione demo (https://github.com/pmellaaho/RxApp) per sperimentare come affrontare il tipo di situazioni nell'applicazione Android. Per dirla breve uso un modello singleton da Activity per ottenere la risposta dalla rete. Ciò rende possibile memorizzare le risposte nella cache, accedere ai dati da più componenti dell'interfaccia utente, sottoscrivere richieste in sospeso e anche fornire dati fittizi per i test dell'interfaccia utente automatizzati.

+2

Grazie per la tua applicazione demo! Ma penso che dovremmo usare la libreria RxLifecycle per gestire la rotazione mentre stiamo facendo una richiesta. Guarda le modifiche RxAndroid e il rilascio stabile https://github.com/ReactiveX/RxAndroid/blob/80393be5a835374bf9614e89f0629d5650fcdf92/CHANGES.md –

+1

Non ho esperienza di prima mano su RxLifecycle ma penso che possa occuparsi della disiscrizione automatica basata su eventi del ciclo di vita per te. Devi comunque occuparti di iscriverti alle richieste in sospeso/ottenere i dati memorizzati nella cache da solo. Correggere se ho torto – pmellaaho

+0

Penso che tu abbia ragione, ma non ho ancora implementato RxLifecycle, quindi non posso correggerti ora. Spero che qualcuno che ha già utilizzato RxLifecycle e RxBinding possa correggerci. –

0

Ho recentemente utilizzato Loader combinato con ConnectableObservable per gestire le migliori rotazioni durante lo stream RxJava2. Ho persino creato un Medium Post spiegando in dettaglio il mio approccio.

In sostanza, bisogna mettere l'osservabile (ConnectableObservable) in una Loader con un trasformatore , e successivo ri-iscriversi ad esso quando l'attività/frammento ripresa dopo essere stata distrutta.

Problemi correlati