Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


SyncAdapter & SyncResult

Quiero saber cuál es el comportamiento predeterminado de SyncManager cuando usamos el objeto SyncResult durante la operación onPerformSync()

Por ejemplo, cuando la sincronización está en error debido a IOException ,

 syncResult.stats.numIoExceptions++ 

A continuación, SyncManager debe administrar la sincronización de reenviar hasta que el sistema especifique un retardo.

¿Pero cuántas veces la sincronización es volver a llamar si IOException accurs en cada sincronización? ¿Cuál es el retraso predeterminado establecido entre cada sincronización? ¿Es posible definir sus propios comportamientos? ¿Dónde puedo encontrar documentación sobre eso?

  • ¿Cómo notificar a la actividad de llamada cuando SyncAdapter ha finalizado?
  • Modo offline de la aplicación android, sincronización local de la base de datos sqlite con la base de datos distante
  • Android java.lang.IllegalMonitorStateException: objeto no bloqueado por hilo antes de esperar ()
  • SyncAdapter siempre en estado pendiente
  • Reproducción de audio sincronizada en dispositivos Android distintos
  • Cómo agregar programaticamente una cuenta personalizada en android?
  • Emisión de concurrencia para la cancelación del bucle de encuesta larga
  • Sincronización cliente-servidor sobre REST
  • 2 Solutions collect form web for “SyncAdapter & SyncResult”

    El objeto SyncResult tiene un campo delayUntil que puede establecer desde su adaptador de sincronización, lo que retrasará cada sincronización siguiente por el número especificado de segundos. Tal vez este es el campo que estás buscando.

    De lo contrario, la sincronización se reprogramará si

    SyncResult.madeSomeProgress() devuelve true – es decir, cierto trabajo fue logrado satisfactoriamente por la sincronización (correspondiente a stats.numDeletes , stats.numInserts > 0 , stats.numUpdates > 0 )

    SyncResult.hasSoftError() devuelve true – ie falló debido a una IOException o porque SyncResult.syncAlreadyInProgress fue true.

    Así que para responder a su pregunta, si IOException s ocurren en CADA sincronización, SyncManager volverá a intentar infinitum – con backoff exponencial.

    La advertencia a esto es que el adaptador de sincronización puede establecer SyncResult.tooManyRetries = true que indicará al SyncManager que la sincronización no se reprograma.

    El tiempo de reintento inicial:

     /** * When retrying a sync for the first time use this delay. After that * the retry time will double until it reached MAX_SYNC_RETRY_TIME. * In milliseconds. */ private static final long INITIAL_SYNC_RETRY_TIME_IN_MS = 30 * 1000; // 30 seconds 

    Puede decirle al framework que deje de volver a intentar la sincronización estableciendo SyncResult#tooManyRetries en true .

    Fuente: SyncManager.java

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.