Android 的 ContentResolver.isSyncActive 在实际同步结束之前返回 false

Posted

技术标签:

【中文标题】Android 的 ContentResolver.isSyncActive 在实际同步结束之前返回 false【英文标题】:Android's ContentResolver.isSyncActive returns false before the actual sync is over 【发布时间】:2015-04-15 05:54:36 【问题描述】:

我正在使用 SwipeRefreshLayout 的 onRefresh 方法通过调用 ContentResolver.requestSync 来触发与 REST 服务的同步,该方法会启动我的 Syncadapter。 然后,Syncadapter 使用 Volley 的请求与服务器进行通信。

为了检测同步操作的结束并关闭活动指示器,我在启动同步的 Fragment 的 SyncStatusObserver 中使用 ContentResolver.isSyncActive。

问题是 ContentResolver.isSyncActive 在与服务器的实际同步结束之前返回 false,导致活动指示器几乎立即消失。

假设 Volley 请求的异步性质导致 SyncAdapter 的 onPerformSync 立即返回,这反过来又使 ContentResolver 认为同步结束,我是否正确?

如果是,这里正确/推荐的解决方案是什么?我可以想出解决方法,但想确保我没有遗漏一些明显的东西。

我查看了许多示例,包括 iosched、swiperefresh、basicsyncadapter 等,但它们似乎都“持有”onPerformSync 方法,直到一切都结束。

谢谢

【问题讨论】:

【参考方案1】:

您应该使请求在 onPerformSync 方法中同步执行。我使用 Retrofit 进行后端调用,但我认为 Volley 也应该提供同步功能。

【讨论】:

以上是关于Android 的 ContentResolver.isSyncActive 在实际同步结束之前返回 false的主要内容,如果未能解决你的问题,请参考以下文章

Android开发实践 ContentProvider和ContentResolver

Android 的 ContentResolver.isSyncActive 在实际同步结束之前返回 false

Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决

Android、MVVM:在 ViewModel 中调用 ContentResolver

Android中利用ContentResolver获取本地音乐和相册

在 Android 7 中,ContentResolver 的方法 openAssetFileDescriptor(vCardUri, "r") 返回 AssetFileDescr