¿Por qué Android activa una sincronización de cuenta de Google cada vez que agrego o elimino una cuenta de un tipo personalizado?

Tengo una aplicación vinculada a un servicio Web que utiliza AccountManager y Sync para permitir a los usuarios iniciar sesión en su cuenta a través de la aplicación y sincronizar sus datos (datos personalizados, contactos o cualquier otra cosa utilizada por las cuentas de Google). AFAIK, estoy haciendo todo lo que se supone que debo hacer. Cuando el usuario inicia sesión a través de nuestra API, guardo su cuenta en el AccountManager de Android:

AccountManager am = AccountManager.get(context); m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data); 

He definido ACCOUNT_TYPE como el nombre del paquete de la aplicación, que debería ser suficiente para distinguirlo de cualquier otro tipo de cuenta.

Tan pronto como se agrega la cuenta, lo configuro para la sincronización automática:

 ContentResolver.setSyncAutomatically(account, AUTHORITY, true); ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS); 

He definido SYNC_FREQUENCY_SECONDS como 86400 (es decir, 1 día).

Del mismo modo, si el usuario se cierra la sesión, solo recupero su cuenta de AccountManager y llamo a removeAccount () para eliminarla. Bonito y simple.

La sincronización se lleva a cabo a través de mi propio código, porque es todos los datos personalizados que se está sincronizando y que todo funciona bien. Sin embargo, lo que me está volviendo loco es que cada vez que uso este código para agregar o eliminar una cuenta (de mi propio tipo), inmediatamente activa una sincronización de todas las cuentas de Google en el dispositivo. Esto significa que antes de sincronizar mis datos, primero tiene que sincronizar todos los datos de correo electrónico, calendario, contactos, Google Play Magazines, datos de Google+ e imágenes, etc., etc., etc. Esto puede tomar varios minutos, durante los cuales mi aplicación Está esperando pacientemente su vez para sincronizar datos. Es extremadamente frustrante y va a ser difícil para mis usuarios entender por qué tarda tanto en sincronizar sus datos una vez que se conectan (por no mencionar el hecho de que, al sincronizar esa cantidad de datos, el teléfono tiene una tendencia a la lentitud Casi hasta el punto de no responder).

¿Estoy haciendo algo mal aquí? ¿Hay algo en mi código que inadvertidamente le dice a Android, "Oye, ve y sincroniza todos tus datos de Google ahora!"? ¿O es algo inherente en el marco de cuentas / sincronización de Google que sólo tengo que aguantar?

One Solution collect form web for “¿Por qué Android activa una sincronización de cuenta de Google cada vez que agrego o elimino una cuenta de un tipo personalizado?”

Creo (aunque no estoy 100% seguro) que se trata de una función de ahorro de energía; Es más eficiente en la batería enviar una transmisión larga en lugar de varias transmisiones más cortas porque la radio permanece encendida en un estado de energía de reserva durante algún tiempo después del final de una transmisión y así enviar una única transmisión larga evita permanecer en modo de espera Energía) más de una vez. Así que estoy adivinando que la infraestructura de sincronización trata de batch juntos tanta sincronización como sea posible.

Si la preocupación es la latencia de la sincronización por primera vez, tal vez podría solicitar manualmente una sincronización para la primera sincronización con un tiempo más inmediato, además de la sincronización periódica automática?

  • Sincronizar varias ventanas con varias vistas en Android
  • Android: cómo recibir notificaciones cuando finaliza la sincronización, al solicitar una sincronización con ContentResolver.requestSync ()
  • ¿Cómo implementar la sincronización de datos entre dispositivos en línea y sin conexión con el motor de aplicaciones de Google?
  • SyncAdapter no se llama dependiendo del orden de las llamadas de configuración de cuenta
  • Android Gradle Error: "Error al obtener el ID de la aplicación para depurar"
  • API de copia de seguridad de Android
  • Evitar que el servicio de fondo se destruya debido a "detectar una CPU excesiva en un proceso bifurcado"
  • Android - Cómo descargar los datos en segundo plano en determinados momentos
  • Sincronizar datos SQLite desde el teléfono Android a la base de datos MySQL de MySQL de Windows
  • Recuperación de llamada de Android SyncAdapter
  • ¿Cómo sincronizar la base de datos SQLite en el teléfono Android con la base de datos MySQL en el servidor?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.