2009-08-24 8 views
17

Tengo un servicio que está descargando un archivo. Cuando finalice la descarga, me gustaría actualizar mi lista de "Archivos descargados" en mi Activity, pero solo si se está ejecutando Activity. No quiero que se inicie Activity si aún no se está ejecutando.¿Cómo usar un intento para actualizar una actividad?

Tenía la esperanza de que pudiera hacer esto haciendo una nueva Intent con alguna bandera especial.

¿Alguien tiene alguna idea de cómo puedo lograr esto? Un pequeño ejemplo de código tal vez?

Respuesta

19

Puede crear nueva instancia BroadcastReceiver y hacer algo a lo largo de estas líneas en su onResume de actividad() método:

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

Después de eso, reemplazar el método OnReceive de myReceiver() para llamar a una función que actualiza el componente que desea :

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

En onPause de su actividad() método, simplemente anular el registro del receptor:

unregisterReceiver(myReceiver); 

Espero que esto lo ayude, no dude en preguntar si hay algo poco claro.

+0

Esto es muy buena manera de comunicación. ¿Pero qué hacer en caso de que se entregaran los resultados, cuando la actividad estaba en estado de pausa? Entonces, después de la actividad onResume puede esperar mucho tiempo para obtener resultados. Y no se recibirán datos, porque se perdieron datos. –

3

La buena manera de hacerlo es vincular la actividad de "Archivos descargados" al servicio. Cuando enlaza el servicio, en la función onServiceConnected, registre una devolución de llamada de Binder. Luego, cuando tenga nuevos datos disponibles, el servicio solo llama a esa devolución de llamada. Si la actividad no se está ejecutando, la lista de devolución de llamada en el lado del servicio estará vacía, por lo que no informará su actividad.

Para un ejemplo de este enfoque, echar un vistazo a RemoteService.java en Android SDK:

muestras \ ApiDemos \ src \ com \ ejemplo \ androide \ API \ app \

+0

¿Cuál sería la ventaja de esto, en comparación con la intención de enviar mensajes como Dimitar Dimitrov? Gracias – urSus

Cuestiones relacionadas