2011-03-11 10 views
6

Recuerdo haber leído acerca de una interfaz de receptor de difusión desde el adaptador de sincronización o algunos eventos de Recordatorio de resultados de sincronización de progreso. ¿Hay algo integrado en el patrón SyncAdapter o es de fabricación propia?¿Cómo se puede escuchar el progreso de Android SyncAdapter?

+0

Lo he usado para actualizar un progreso en la interfaz de usuario a través de la actividad. Como no sincronizo el adaptador de sincronización, uso un progreso indeterminado. Me gustaría ver su código de sincronización para ver cómo podría usarlo sin que haya sido un proceso continuo y sin interrupción, por ejemplo, usar una cantidad de hilos trabajando en un grupo de hilos o en el servicio Ejecutor. También puede enviar params adicionales al Receptor cada dos segundos/minutos, por ejemplo, 'código' intent.putExtra (SYNCING_STATUS_TIME, 30); 'código' –

Respuesta

5

Lo que funciona:

El método sugerido en una reunión de 2010 Google IO, Developing Android REST client applications es colocar columnas en su ContentProvider como etiquetas para indicar que un registro se han recuperado o se coloca o etc. Esto permite una fila por cada spinner (u otro cambio visual) para ser colocado en su UI. Puede hacer eso a través de un CursorAdapter personalizado que maneja un ListView. Your ContentProvider está listo para hacer que las banderas cambien según sea necesario.

lo que no funciona:

Puede también utilizar un SyncStatusObserver - que es bastante inútil, ya que responde a cada cambio de estado, no sólo su par cuenta/contentauthority específica, y realmente no le dice usted mucho más que eso, se produjo un cambio. Por lo tanto, no puede decir qué se está sincronizando y no puede distinguir entre "inicio de evento de sincronización" y "evento de fin de sincronización". Sin valor. : P

+1

Fui a un enfoque de pub-sub al que uso ResultReceiver para responder a la interfaz de usuario desde el hilo de sincronización. El servicio agrega y elimina suscriptores mientras se ejecuta el hilo de sincronización y, si hay alguno disponible, lo difunde a los receptores activos. Estaba pensando en utilizar el SyncStatusObserver para activar la interfaz de usuario que activó la sincronización periódica: lo proxy en un evento de estado de suscripción de "sincronización de inicio". – mobibob

11

Acabo de implementar un receptor Broadcast desde un adaptador de sincronización y funciona como un reloj!

Usando un receptor configurado como una clase interna y llamando al registroReceptor en onCreate y unregisterReceiver en onDestroy hizo esto por mí.

Como tengo un método estrategia para desovar y consultar un número de hilos, Todo lo que tengo en el comienzo de una carrera SyncAdapter son:

Intent intent = new Intent(); 
intent.setAction(ACTION); 
intent.putExtra(SYNCING_STATUS, RUNNING); 
context.sendBroadcast(intent); 

Y al final de la carrera de sincronización que tengo:

intent.putExtra(SYNCING_STATUS, STOPPING); 
context.sendBroadcast(intent); 

Dentro de mi actividad, declaro:

onCreate(Bundle savedInstance){ 

super.onCreate(savedInstance); 
SyncReceiver myReceiver = new SyncReceiver(); 
RegisterReceiver(myReceiver,ACTION); 

} 



onDestroy(){ 

super.onPause(); 
unRegisterReceiver(myReceiver); 

} 



public class SyncReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     //do something 
    } 
    } 
} 

para este escenario no es necesario añadir su receptor al archivo de manifiesto. solo uso como es!

+0

Correo Esto es interesante y probablemente muy preciso, pero la pregunta era sobre el progreso de escucha (monitoreo). El problema era que mi adaptador de sincronización se estaba ejecutando y ejecutándose, sin un final a la vista, así que quería proporcionar progreso a la interfaz de usuario. – mobibob

+0

Lo he usado para actualizar un progreso en la UI a través de la actividad. Como no sincronizo el adaptador de sincronización, uso un progreso indeterminado. Me gustaría ver su código de sincronización para ver cómo podría usarlo sin que haya sido un proceso continuo sin parar, por ejemplo, use una cantidad de hilos trabajando en un grupo de hilos o y el servicio Executor –

+0

Esta es la mejor respuesta si está buscando un camino para manipular el inicio y el final de SyncAdapter. – MurifoX

Cuestiones relacionadas