2009-08-24 11 views
17

Ho un servizio che sta scaricando un file. Al termine del download, desidero aggiornare l'elenco "File scaricati" nel mio Activity, ma solo se è in esecuzione Activity. Non voglio che lo Activity si avvii se non è già in esecuzione.Come utilizzare un intento per aggiornare un'attività?

Speravo di poterlo fare creando un nuovo Intent con una bandiera speciale.

Qualcuno ha idea di come posso raggiungere questo obiettivo? Un esempio di codice minuscolo forse?

risposta

19

È possibile creare nuova istanza BroadcastReceiver e fare qualcosa in questo senso sul tuo onResume di attività() metodo:

registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED)); 

Dopo di che, l'override di myReceiver OnReceive() per chiamare una funzione che aggiorna il componente che si desidera : metodo

@Override 
public void onReceive(Context context, Intent intent) { 
... 
    updateViewWithData(service.getNewFileData()); 
... 
} 

Sul onPause del vostro Activity(), basta annullare la registrazione del ricevitore:

unregisterReceiver(myReceiver); 

Spero che questo ti possa aiutare, sentiti libero di chiedere se c'è qualcosa di poco chiaro.

+0

Questo è molto buon senso di comunicazione. Ma cosa fare se i risultati sono stati consegnati, quando l'attività era in pausa? Quindi, dopo l'attività di consumo può attendere molto tempo per i risultati. E nessun dato verrà ricevuto, perché i dati sono stati persi. –

3

Il modo migliore per eseguire questa operazione è associare l'attività "File scaricati" al servizio. Quando si associa il servizio, nella funzione onServiceConnected, registrare un callback di Raccoglitore. Quindi, ogni volta che sono disponibili nuovi dati, il servizio chiama solo quella richiamata. Se l'attività non è in esecuzione, l'elenco di richiamata sul lato del servizio sarà vuoto, quindi non informerà la tua attività.

Per un esempio di questo approccio, dare un'occhiata a RemoteService.java in Android SDK:

campioni \ ApiDemos \ src \ com \ esempio \ Android \ API \ app \

+0

Quale sarebbe il vantaggio di questo, rispetto ai messaggi di intenti proposti da Dimitar Dimitrov? Grazie – urSus

Problemi correlati