当SyncAdapter在android上运行同步时?

时间:2011-04-04 11:06:59

标签: android android-syncadapter

假设我的应用程序实现了SyncAdapter功能,并没有定义定期同步。在这种情况下会发生同步吗?我可能会想到的第一个场景是本地ContentProvided /数据库内容更改。 什么是服务器更改? SyncAdapter将如何了解这一点?

1 个答案:

答案 0 :(得分:32)

如果您没有定期同步设置,如果您的代码使用您的帐户和权限明确调用ContentResolver.requestSync(Account account, String authority, Bundle extras),则会发生同步。

此外,如果您的ContentProvider插入或更新或删除函数调用ContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork),如果bool syncToNetwork为true(默认值),它还将触发同步。这里引发了一个短暂的延迟,以确保一批数据库更改仅导致一次同步,而不是每次更改一次。请注意,您的代码应该调用notifyChange,因为在UI反映的内容发生更改之后,Android就会通过Android来指示您的UI更新。

如果服务器数据库发生更改,您的应用将无法知道,因为未发生同步。两个选项:

  1. 使用定期同步。如果您的服务器API实现了etags或if-modified-since http标头来过滤您同步的数据,那么这将更加清晰,因此只会更新更新。
  2. C2DM(云端2设备信息)从本质上讲,推送Android的通知。需要一些服务器组件 - 您将设备ID绑定到服务器上的帐户,并且当服务器更改时,它必须向设备显式发送消息以告知其更新。这是服务器上的自定义代码工作,专门支持android,但一旦你投入时间,它就很棒。 C2DM是Android在收到收件箱10秒后让你的设备上显示gmail的方式,而不是接下来的10分钟定期同步。它还具有更高的电池效率,因为当您知道有新数据可用时,您只需打开收音机并进行同步。