当SyncAdapter在android上运行同步?

比方说,我的应用程序实现SyncAdapterfunction,并没有定义定期同步。 在这种情况下会发生同步吗? 我可能会考虑的第一种情况是本地ContentProvided /数据库内容更改。 什么是服务器更改? SyncAdapter如何知道这一点?

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

此外,如果您的ContentProvider插入或更新或删除函数调用ContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) ,如果布尔syncToNetwork为true(默认),它也将触发同步。 这里有一个短暂的延迟,以确保一批数据库更改只导致一个同步,而不是每更改一个。 请注意,您的代码应该调用notifyChange因为这是Android在用户界面反映的内容发生更改后如何notifyChange您的用户界面更新的信息。

如果服务器数据库发生变化,您的应用程序将不知道,因为同步没有发生。 两个选项:

  1. 使用定期同步。 如果你的服务器API实现了etags或者if-modified,那么这将会更干净,因为http标头可以过滤你同步的数据,所以只有更新结束。
  2. C2DM (云2设备消息传递)本质上,推送通知为Android。 需要一些服务器组件 – 将设备ID绑定到服务器上的一个帐户,当服务器发生变化时,它必须明确地向设备发送一条消息,告诉它更新。 这是自定义代码在服务器上工作,以专门支持android,但一旦你投入的时间,这是伟大的。 C2DM是Android获取gmail到达收件箱10秒后在您的设备上显示,而不是在接下来的10分钟定期同步。 由于您只需打开收音机并在知道有新数据获取时进行同步,因此它的电池使用效率更高。