Warum löst Android ein Google-Konto synchronisieren jedes Mal, wenn ich ein Konto von einem benutzerdefinierten Typ hinzufügen / entfernen?

Ich habe eine App, die mit einem Webdienst verknüpft ist, der AccountManager und Sync verwendet, um Benutzern zu erlauben, sich über die App auf ihrem Konto anzumelden und ihre Daten zu synchronisieren (dies sind benutzerdefinierte Daten, keine Kontakte oder sonstiges, die von Google-Konten verwendet werden). AFAIK, ich mache alles so, wie ich soll Wenn sich der Benutzer über unsere API anmeldet, speichere ich das Konto auf dem Android AccountManager:

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

Ich habe ACCOUNT_TYPE definiert, um nur der Paketname der App zu sein, der ausreichen sollte, um ihn von jedem anderen Kontotyp zu unterscheiden.

  • Warum ist AccountAuthenticator # getAuthToken () nicht aufgerufen?
  • Speichern Sie zusätzliche Daten im Android Account Manager
  • Android SyncAdapter Automatisches Initialisieren der Synchronisierung
  • Ein gutes Tutorial für die Verwendung von AccountManager in Android?
  • Android Account Authenticator bearbeiten Email Id Credentials
  • Wie kann ich das angemeldeten Google-Konto auf Android-Handys abrufen?
  • Sobald das Konto hinzugefügt ist, setze ich es für die automatische Synchronisierung:

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

    Ich habe SYNC_FREQUENCY_SECONDS als 86400 (dh 1 Tag) definiert.

    Ähnlich, wenn der Benutzer sich abmeldet, rufe ich gerade ihr Konto von AccountManager ab und rufe removeAccount () auf, um es zu entfernen. Schön und einfach.

    Die Synchronisierung erfolgt durch meinen eigenen Code, denn es sind alle benutzerdefinierten Daten, die synchronisiert werden, und das alles funktioniert ganz gut. Allerdings, was mich verrückt macht ist, dass, wenn ich diesen Code verwenden, um ein Konto hinzuzufügen oder zu entfernen (meines eigenen Typs), löst es sofort eine Synchronisierung aller Google-Konten auf dem Gerät aus. Das bedeutet, dass es, bevor es meine Daten synchronisiert, zuerst alle E-Mails, Kalenderdaten, Kontakte, Google Play Magazine, Google+ Daten und Bilder usw. usw. synchronisieren muss. Dies kann einige Minuten dauern, in denen meine App Ist nur geduldig warten, um zu drehen, um Daten zu synchronisieren. Es ist sehr frustrierend, und es wird schwer für meine Benutzer zu verstehen, warum es so lange dauert, bis sie ihre Daten synchronisieren, sobald sie sich anmelden (nicht zu erwähnen, dass bei der Synchronisierung so viel Daten das Telefon eine Tendenz hat zu verlangsamen Bis auf den Punkt der Unempfänglichkeit hinunter).

    Bin ich hier etwas falsch? Gibt es etwas in meinem Code, der versehentlich Android erzählt, "Hey, geh und synchronisiere alle deine Google Daten jetzt!"? Oder ist es etwas in der Konten / Sync-Framework von Google, die ich nur zu tun haben?

  • Erstellen Sie einen neuen synchronisierten Kalender mit Android-API
  • Android Studio macht mein Testmodul abhängig vom Anwendungsmodul
  • Was ist android: layout_marginStart
  • Die 0-Byte-Datei erscheint beim Aufnehmen des Bildschirms durch Screencap
  • Diagramm Anforderungsfehler 500
  • Android Studio 1.0 baut zu langsam
  • One Solution collect form web for “Warum löst Android ein Google-Konto synchronisieren jedes Mal, wenn ich ein Konto von einem benutzerdefinierten Typ hinzufügen / entfernen?”

    Ich denke (obwohl ich bin nicht 100% sicher), dass dies eine energiesparende Funktion ist; Es ist mehr batterieeffizient, eine lange Übertragung zu senden, anstatt mehrere kürzere Übertragungen, weil das Radio in einem Standby-Power-Zustand für einige Zeit nach dem Ende einer Übertragung bleibt und so das Senden einer einzigen langen Übertragung vermeidet, im Standby zu bleiben (im Wesentlichen verschwenden Macht) mehr als einmal. Also ich vermute, dass die Synchronisierungsinfrastruktur versucht, so viel Synchronisierung zusammenzubringen, wie es möglich ist.

    Wenn die Sorge die Latenz der Erst-Synchronisation ist, könnte man manuell eine Synchronisation für die Erst-Synchronisation mit einer unmittelbaren Zeit zusätzlich zu der periodischen automatischen Synchronisation anfordern?

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.