Mam aplikację połączoną z usługą sieci Web, która korzysta z AccountManager i Sync, aby umożliwić użytkownikom logowanie się do swojego konta za pośrednictwem aplikacji i synchronizowanie ich danych (to są dane niestandardowe, a nie kontakty lub cokolwiek innego używane przez konta Google). AFAIK, robię wszystko tak, jak powinienem. Gdy użytkownik loguje się za pośrednictwem naszego API, zapisać swoje konto do Android AccountManager:Dlaczego system Android uruchamia synchronizację konta Google przy każdym dodawaniu/usuwaniu konta niestandardowego typu?
AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);
Mam zdefiniowane ACCOUNT_TYPE aby być po prostu nazwę pakietu aplikacji, które powinny być wystarczające, aby odróżnić go od innych koncie rodzaj.
Natychmiast po dodaniu konta, ustawić go do automatycznej synchronizacji:
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);
I zdefiniowanych SYNC_FREQUENCY_SECONDS jako 86400 (to znaczy, 1 dzień).
Podobnie, jeśli użytkownik się wyloguje, po prostu pobieram jego konto z AccountManager i wywołuję removeAccount(), aby go usunąć. Ładne i proste.
Synchronizacja odbywa się za pomocą mojego własnego kodu, ponieważ wszystkie dane niestandardowe są zsynchronizowane i wszystko działa dobrze. Jednak to, co doprowadza mnie do szaleństwa, polega na tym, że za każdym razem, gdy używam tego kodu do dodawania lub usuwania konta (własnego typu), natychmiast uruchamia synchronizację wszystkich kont Google na urządzeniu. Oznacza to, że zanim zsynchronizuje moje dane, najpierw musi zsynchronizować wszystkie wiadomości e-mail, dane kalendarza, kontakty, czasopisma Google Play, dane i zdjęcia Google+ itp. Itp. Może to potrwać kilka minut, podczas których moja aplikacja tylko cierpliwie czeka na swoją kolej, aby zsynchronizować dane. Jest to bardzo frustrujące i dla moich użytkowników będzie ciężko zrozumieć, dlaczego synchronizacja danych po ich zalogowaniu trwa tak długo (nie wspominając o tym, że kiedy synchronizuje się z tak dużą ilością danych, telefon ma tendencję do spowalniania prawie do momentu braku reakcji).
Czy robię coś nie tak? Czy jest coś w moim kodzie, które nieumyślnie mówi Androidowi: "Hej, idź i zsynchronizuj wszystkie swoje dane Google teraz!"? A może jest to czymś nieodłącznym w strukturze konta/synchronizacji Google, którą muszę tylko znosić?
Czy wyłączyć funkcję Autosync (jeśli jest włączona) dodać/usunąć swoje konto niestandardowe, a następnie ponownie je włączyć? –
Interesujący pomysł. Spróbuję. –