Ho un'app collegata a un servizio Web che utilizza AccountManager e Sincronizza per consentire agli utenti di accedere al proprio account tramite l'app e sincronizzare i propri dati (si tratta di dati personalizzati, non di contatti o qualsiasi altra cosa utilizzata dagli account Google). AFAIK, sto facendo tutto come dovrei. Quando l'utente accede attraverso la nostra API, risparmio il loro account per AccountManager Android:Perché Android attiva una sincronizzazione dell'account Google ogni volta che aggiungo/rimuovi un account di un tipo personalizzato?
AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);
ho definito ACCOUNT_TYPE di essere solo il nome del pacchetto dell'app, che dovrebbe essere sufficiente per distinguerlo da qualsiasi altro account genere.
Non appena si aggiunge l'account, ho impostato per la sincronizzazione automatica: SYNC_FREQUENCY_SECONDS
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);
ho definito 86400 (vale a dire, 1 giorno).
Analogamente, se l'utente si disconnette, recupero il proprio account da AccountManager e richiama removeAccount() per rimuoverlo. Bello e semplice
La sincronizzazione viene eseguita tramite il mio codice, perché sono tutti i dati personalizzati che vengono sincronizzati e che tutto funziona correttamente. Tuttavia, quello che mi sta facendo impazzire è che ogni volta che uso questo codice per aggiungere o rimuovere un account (del mio tipo), si attiva immediatamente una sincronizzazione di tutti gli account Google sul dispositivo. Ciò significa che, prima di sincronizzare i miei dati, deve prima sincronizzare tutte le e-mail, i dati del calendario, i contatti, Google Play Magazines, i dati e le immagini di Google+, ecc. Ecc. Ciò può richiedere diversi minuti, durante i quali la mia app attende pazientemente il suo turno per sincronizzare i dati. È estremamente frustrante e sarà difficile per i miei utenti capire perché ci vuole così tanto tempo per sincronizzare i loro dati una volta effettuato l'accesso (per non parlare del fatto che, quando si sincronizzano molti dati, il telefono ha la tendenza a rallentare giù quasi al punto di non rispondere).
Sto facendo qualcosa di sbagliato qui? C'è qualcosa nel mio codice che inavvertitamente dice ad Android: "Ehi, vai e sincronizza tutti i tuoi dati di Google ora!"? O è qualcosa inerente al framework Account/Sync di Google che devo solo sopportare?
Disattiva Autosync (se attivato) aggiungi/rimuovi il tuo account personalizzato e quindi riattivalo facendo il trucco? –
Idea interessante. Darò una prova. –