¿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
  • sincronización del tiempo del emulador androide
  • Cómo sincronizar datos entre diferentes dispositivos
  • ¿Cómo funciona la sincronización de datos y cómo la uso en aplicaciones cliente-servidor?
  • Sincronizar dispositivos Android a través de la hora GPS?
  • Evitar que el servicio de fondo se destruya debido a "detectar una CPU excesiva en un proceso bifurcado"
  • Sincronizar la hora del sistema en 2 teléfonos
  • Sincronizar datos SQLite desde el teléfono Android a la base de datos MySQL de MySQL de Windows
  • Android Gradle Error: "Error al obtener el ID de la aplicación para depurar"
  • Cómo mostrar el mensaje de error de sincronización
  • Cómo compartir un objeto entre dos subprocesos (sincronización de subprocesos)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.