2015-11-20 16 views
11

Ho un servizio associato che è responsabile del download dei file e quindi conosce lo stato/l'avanzamento del download. E l'interfaccia utente (frammento o attività) deve mostrare/aggiornare l'avanzamento del download dal servizio.Come aggiornare l'interfaccia utente dal servizio Android utilizzando RxJava/RxAndroid

In realtà penso che il modo comune sia utilizzare BroadcastReciever o un CallBack da Attività. Ma ho sentito da qualche parte sull'utilizzo di RxJava (Programmazione ReactiveX) e della classe del mediatore (e di Dagger per iniettarlo sia in servizio che in attività) che è menzionato di seguito.

Quindi la mia domanda è come gestire RxJava con questo gruppo di cose? Qualche esempio di codice? C'è un altro modo efficace rispetto all'utilizzo di intenti?

risorse: More efficient way of updating UI from Service than intents? [vedi il primo aggiornamento risposta]

+1

Personalmente preferisco usare il servizio Messenger: http://developer.android.com/reference/android/os/Messenger.html – mjp66

+1

Pensavo di avere un esempio di utilizzo di Messenger da qualche parte qui, immagino di no, ma ecco una buona post che dettaglia il suo utilizzo: http://stackoverflow.com/questions/4300291/example-communication-between-activity-and-service-using-messaging – mjp66

+0

basta usare il pattern "local bound service", senza bisogno di librerie esterne e è la soluzione più veloce – pskink

risposta

1

Il Binder sottoclasse si utilizza quando qualcosa si lega al vostro Service può esporre un metodo che restituisce un Observable che emette dati di avanzamento.

L'avvertenza con questo approccio è che si dispone di due risorse che è necessario rilasciare quando l'istanza Activity non è più valida: la connessione del servizio e l'abbonamento osservabile.

+0

puoi spiegare il tuo commento o dare qualche esempio? –

+2

Risposta errata. Observable non è un oggetto serializzato, quindi non è sicuro se funzionerà, specialmente se il servizio è progettato per l'interazione tra processi. Non funzionerà – msangel

+1

L'interazione tra processi non rientra nell'ambito di questa domanda. Altrimenti, è fondamentalmente come esporre l'istanza di servizio tramite il Raccoglitore e anche il Servizio non è serializzabile. – npace

Problemi correlati