Prima di iniziare, vorrei essere chiaro che non sto chiedendo informazioni sui threading. Capisco il threading, le varie opzioni e non eseguo il blocco del lavoro sul thread principale.
Sto cercando ciò che altri hanno fatto per gestire un'operazione a lungo termine con il ciclo di vita di Android. La situazione comune che incontro è un'attività che prende il via, diciamo un accesso alla rete, e aspetta il completamento. Il risultato di questa operazione sarà visibile all'utente, quindi l'attività spesso visualizza una finestra di dialogo mentre si lavora.
La sfida non sta facendo il lavoro, sta notificando l'attività / frammento che ha dato il via che il lavoro è finito. Ovviamente un'attività può essere messa in pausa o ricreata in qualsiasi momento, quindi avere l'attività di notifica all'attività pertinente ogni volta che si ripresenta è la vera sfida. Il valore deve essere consegnato in qualche modo, ma deve anche essere memorizzato nella cache fino a quando non viene recuperato. Sono sorpreso di scoprire che molti degli articoli (se non tutti) che ho trovato ignorano uno di questi fattori.
Gli intenti NON funzionano per questo, e nessuno dei due tipi di bus eventi, perché entrambi sparano e non si preoccupano di chi lo riceve. Se l'app è in background, non saprà mai se l'operazione è stata completata al momento della ripresa.
Attualmente sto usando AndroidRx / RxJava con Observables detenuto da un Fragment conservato, e sottoscrivo / disiscrivo in onStart / onStop. Questo in realtà soddisfa tutti i miei requisiti (utilizzando .cache () salva i risultati fino alla consegna, se non ci sono abbonati), ma richiede molto tempo per aggiungere una nuova chiamata API (aggiungi l'Osservabile al frammento, aggiungi un Abbonamento all'attività , assicurarsi che siano gestiti in onStart / onStop e quindi scrivere l'Abbonato). Qualcuno ha un modo migliore che non richiede così tanto standard?