android - 系统如何触发 SyncAdapter?

标签 android

我有一个应用程序,它使用 SyncAdapter 对远程服务器进行 REST 调用,然后使用内容提供程序将更新保存到本地 SQLLite 数据库。

我可以通过转到“帐户与同步”来触发调用,然后选择我的适配器,然后使用“重新同步”按钮触发调用

系统如何知道何时(多久)在 SyncAdapter 中调用 onPerformSync()?

我正在登录 REST 调用解析到的服务,但我没有看到任何调用,除非我如上所述手动执行此操作。

顺便说一句,我现在正在模拟器中运行,我还没有在设备上安装它

最佳答案

您必须从您的 ContentProvider 让您的 SyncAdapter 知道数据集发生了变化。

您可以通过调用 notifyChange() 来完成此操作

例如在您的 ContentProviders insert() 方法中:

getContext().getContentResolver().notifyChange(rowUri, null);

它可能不会立即同步,但这就是 SyncAdapter 的工作方式。系统决定何时是同步的好时机。根据我的经验,通常它发生得相对较快。当然,您可能不希望每次数据库发生更改时都进行同步,但您始终可以将代码放入 performSync 中以控制同步频率。

希望这对某人有帮助:)

关于android - 系统如何触发 SyncAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790060/

相关文章:

android - 无法为RecyclerView的DividerItemDecoration设置Custom Drawable

android - 无法在 onActivityResult 处 getIntExtra()

当键盘出现在 Fragment 中时,Android EditText 键入的文本不显示

android - Android 版 OsmDroid 上的 ItemizedOverlay 和自定义标记,不再有触摸事件

android - 为什么 Log.d() 消息不应该显示在设备上?

android - 如何在可绘制形状 XML 选择器中制作底部边框?

android - 是否有使用 VerticalGrid 而不是 Horizo​​ntalGridView 的 ListRowPresenter?

android - 适用于Android的Google Analytics(分析)无法在实际设备上运行

android - INSTALL_FAILED_MISSING_SHARED_LIBRARY 安装 apk(无 Google API)

android - Canvas 中的多个图像旋转