当SyncAdapter在android上运行同步时?

LA_*_*LA_ 21 android android-syncadapter

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

jcw*_*ger 32

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

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

如果服务器数据库发生更改,您的应用程序将无法知道,因为未发生同步.两种选择:

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