SyncAdapter何时在android上运行同步?

发布于 2024-10-30 04:11:16 字数 132 浏览 3 评论 0原文

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

Let's say, my application implements SyncAdapter functionality and doesn't define periodic syncs. When synchronization will happen in such scenario? First scenario I may think about is local ContentProvided/database content change.
What is about server changes? How SyncAdapter will know about that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

划一舟意中人 2024-11-06 04:11:16

如果您没有定期同步设置,则当您的代码使用您的帐户和权限显式调用 ContentResolver.requestSync(Account account, Stringauthority, Bundle extras) 时,就会发生同步。

另外,如果您的ContentProvider插入或更新或删除函数调用ContentResolver.notifyChange(Uri uri, ContentObserverobserver, booleansyncToNetwork),如果boolsyncToNetwork为true(默认),它也会触发同步。这里引入了短暂的延迟,以确保一批数据库更改仅导致一次同步,而不是每次更改一次。请注意,您的代码应该调用 notifyChange,因为这是 Android 在 UI 反映的内容发生更改后通知您的 UI 进行更新的方式。

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

  1. 使用定期同步。如果您的服务器 API 实现 etag 或 if-modified-since http 标头来过滤您同步的数据,这样只会更新更新,这会更干净。
  2. C2DM(Cloud 2 设备消息传递) 本质上,推送Android 的通知。需要一些服务器组件——您将设备 ID 与服务器上的帐户绑定,当服务器发生更改时,它必须显式向设备发送消息以告知其进行更新。这是在服务器上专门支持 Android 的自定义代码工作,但是一旦您投入时间,它就很棒。 C2DM 是 Android 使 Gmail 在到达收件箱 10 秒后显示在您的设备上的方式,而不是在接下来的 10 分钟定期同步。它的电池效率也更高,因为您只有在知道有新数据需要获取时才打开收音机和同步。

If you have no periodic sync setup, Sync will happen if your code explicitly calls ContentResolver.requestSync(Account account, String authority, Bundle extras) with your account and authority.

Also, if your ContentProvider insert or update or delete functions call ContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork), if the bool syncToNetwork is true (the default), it will also trigger a sync. There's a short delay induced here, to ensure that a batch of database changes only causes one sync, not one per change. Note that your code should be calling notifyChange because it's how Android signals your UI to update after Content that the UI is reflecting had been changed.

If the server database changes, your app won't know, because sync isn't happening. Two options:

  1. Use periodic sync. This will be cleaner if your server API implements etags or the if-modified-since http headers to filter the data you sync so only the updates come down.
  2. C2DM (Cloud 2 Device Messaging) Essentially, push notification for Android. Requires some server components -- You tie a device ID to an account on the server and when the server changes, it has to explicitly send a message to the device to tell it to update. This is custom code work on the server to support android specifically, but once you invest the time, it's great. C2DM is how Android gets gmail to show up on your device 10 seconds after it arrives in your inbox, rather than at the next 10 minute periodic sync. It's also more battery efficient since you only turn on the radio and sync when you know there's new data to get.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文