Android SyncAdapter atascado en un bucle de sincronización infinito

Estoy escribiendo un adaptador de sincronización de Android y, básicamente, tener un problema con la sincronización en un bucle infinito. Tan pronto como la sincronización se completa, comienza de nuevo.

Gracias,

Saludos,

Akshay

@Override public void onPerformSync(final Account account, final Bundle extras, final String authority, final ContentProviderClient provider, final SyncResult syncResult) { Log.i("Sync result full sync = " + syncResult.fullSyncRequested); Log.i("Sync result " + syncResult.toDebugString()); Log.i("Bundle " + extras.toString()); final CountDownLatch latch = new CountDownLatch(3); final CachedDataReceiver globalStreamRefreshReciever = new CachedDataReceiver(null) { @Override protected void onComplete(int resultCode) {latch.countDown();} @Override protected void onError() {latch.countDown();} }; final CachedDataReceiver newMessagesReciever = new CachedDataReceiver(null) { @Override protected void onComplete(int resultCode) {latch.countDown();} @Override protected void onError() {latch.countDown();} }; final CachedDataReceiver getViewedMessagesReciever = new CachedDataReceiver(null) { @Override protected void onComplete(int resultCode) {latch.countDown();showAnyNewInboxItemAlerts(getApplicationContext());} @Override protected void onError() {latch.countDown();} }; /*long currentTime = System.currentTimeMillis(); long netTime = currentTime-getLastSyncTimeStamp(); boolean shouldSync = (netTime - getSyncInterval()) >=0; if (!shouldSync && getSyncInterval()!=Constants.INVALID_ITEM){ Log.i("Current time = " + currentTime + " last sync = " + getLastSyncTimeStamp() + " sync interval = " + getSyncInterval()); Log.i("Difference = " + (netTime - getSyncInterval())); return; }*/ if (user.isUserLoggedIn() && (!TextUtils.isEmpty(user.peekLoggedInUserAccountToken(null)))){ startService(api.getGlobalStream(0,10,globalStreamRefreshReciever)); startService(api.getNewMessagesInbox(newMessagesReciever)); startService(api.getViewedMessagesInbox(false, getViewedMessagesReciever)); addTimeStamp(); Log.i("in sync"); try { latch.await(1, TimeUnit.MINUTES); } catch (InterruptedException interruptedException) { interruptedException.printStackTrace(); Log.e("Error in latch while sync "); } } } 

Te estás perdiendo mucho código allí, difícil de encontrar tu problema cuando no nos dicen lo que estás haciendo.

Salir en una extremidad con una conjetura a sus problemas …

¿O addTimeStamp() o los diversos servicios que crea modifican los datos almacenados en su ContentProvider?

Si es así, ¿su ContentProvider llama a ContentResolver.notifyChange(uri, null) ?

Si es así, su ContentProvider notifica a Android que ha cambiado y necesita una sincronización, conduciendo así un bucle.

El API es notifyChange (Uri uri, ContentObserver observer, boolean syncToNetwork) . Necesita llamar con notifyChange(uri, null, false); – Esto indica que usted ha sacado un cambio de la red y que no debe ser empujado de nuevo a la red, rompiendo así el bucle.

Cuando tenemos ContentObserver registrado, el adaptador de sincronización entrará en bucle incluso después de establecer la sincronización como falsa.

 notifyChange(uri, null, false); 
  • Sincronización de un servicio REST con una aplicación de Android
  • ¿Cómo puedo añadir una categoría a mi SyncAdapter?
  • ¿Es mala práctica o grosero hacer ContentResolver.setMasterSyncAutomatically en una aplicación android?
  • Se pierde la aplicación Android de SyncAdapter
  • El adaptador de sincronización programado se ejecuta cada 30 segundos
  • Adaptador de sincronización de Android con cuentas de usuario de Google Appengine
  • Adaptador de sincronización de contactos en android
  • Recuperación de llamada de Android SyncAdapter
  • Inicie sesión dos veces cuando use SyncAdapters
  • Up-Sync y Down-Sync en Android?
  • Proveedor de calendario de Android: ¿Existe un identificador único para eventos, utilizable en varios dispositivos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.