我有一个与 Web 服务链接的应用程序,该服务使用 AccountManager 和 Sync 来允许用户通过应用程序登录到他们的帐户并同步他们的数据(这是自定义数据,而不是联系人或 Google 帐户使用的任何其他内容)。AFAIK,我正在按照我应该做的一切。当用户通过我们的 API 登录时,我将他们的帐户保存到 Android AccountManager:
AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);
我已将 ACCOUNT_TYPE 定义为应用程序的包名称,这足以将其与任何其他帐户类型区分开来。
添加帐户后,我将其设置为自动同步:
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);
我已将 SYNC_FREQUENCY_SECONDS 定义为 86400(即 1 天)。
同样,如果用户注销,我只需从 AccountManager 检索他们的帐户并调用 removeAccount() 将其删除。很好很简单。
同步是通过我自己的代码执行的,因为它是正在同步的所有自定义数据,并且一切正常。然而,让我抓狂的是,每当我使用此代码添加或删除一个帐户(我自己的类型)时,它会立即触发设备上所有 Google 帐户的同步。这意味着,在同步我的数据之前,它首先必须同步所有电子邮件、日历数据、联系人、Google Play 杂志、Google+ 数据和图片等等等等。这可能需要几分钟,在此期间我的应用程序只是耐心地等待轮到同步数据。这非常令人沮丧,而且我的用户很难理解为什么他们登录后同步数据需要这么长时间(更不用说当它同步这么多数据时,
我在这里做错了吗?我的代码中是否有某些东西无意中告诉 Android,“嘿,现在去同步你所有的 Google 数据!”?还是我不得不忍受的谷歌帐户/同步框架中固有的东西?