Rus*_*art 14 android sync accountmanager
我有一个与使用AccountManager和Sync的Web服务相关联的应用,允许用户通过应用登录到他们的帐户并同步他们的数据(这是自定义数据,而不是Google帐户使用的联系人或其他任何内容).AFAIK,我正按照我应该的方式做所有事情.当用户通过我们的API登录时,我将他们的帐户保存到Android AccountManager:
AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);
Run Code Online (Sandbox Code Playgroud)
我已将ACCOUNT_TYPE定义为应用程序的包名称,这应足以将其与任何其他帐户类型区分开来.
添加帐户后,我会将其设置为自动同步:
ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);
Run Code Online (Sandbox Code Playgroud)
我已将SYNC_FREQUENCY_SECONDS定义为86400(即1天).
同样,如果用户注销,我只需从AccountManager中检索他们的帐户并调用removeAccount()将其删除.很好,很简单.
同步是通过我自己的代码执行的,因为它是正在同步的所有自定义数据,并且一切正常.然而,令我发疯的是,无论何时我使用此代码添加或删除帐户(我自己的类型),它都会立即触发设备上所有Google帐户的同步.这意味着,在同步我的数据之前,首先必须同步所有电子邮件,日历数据,联系人,Google Play杂志,Google+数据和图片等等.这可能需要几分钟,在此期间我的应用只是耐心等待轮到同步数据.这非常令人沮丧,我的用户很难理解为什么一旦他们登录就需要这么长时间来同步他们的数据(更不用说当它同步那么多数据时,手机有慢慢的趋势)几乎到了无反应的程度).
我在这里做错了吗?我的代码中是否存在无意中告诉Android的内容,"嘿,现在就去同步所有Google数据!"?或者,它是Google必须忍受的Google帐户/同步框架中固有的东西?
我认为(虽然我不是100%确定)这是一个省电功能;发送一次长传输比发送多次短传输更节省电池电量,因为无线电在传输结束后会在待机电源状态一段时间,因此发送一次长传输可以避免处于待机状态(本质上浪费电源)不止一次。所以我猜测同步基础设施会尝试将尽可能多的同步进行批处理。
如果担心的是首次同步的延迟,除了定期自动同步之外,也许您还可以手动请求更即时的首次同步同步?
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |