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

时间:2015-02-14 04:09:53

标签: android android-volley android-contentresolver android-syncadapter swiperefreshlayout

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

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

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

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

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

我已经查看了很多例子,包括iosched,swiperefresh,basicsyncadapter等,但他们似乎都在"持有"一切都结束之前的onPerformSync方法。

谢谢

1 个答案:

答案 0 :(得分:0)

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