22

我有点喜欢 Volley 框架,但我仍然对它有些怀疑。

例如,Volley 是如何与 Loader 模式对齐的?由于它的请求是以异步方式处理的,因此在后台调用它没有多大意义。另一方面,如果我们忽略 Loader 模式,我们将取消加载并重新加载必要的资源,这有点浪费。

Volley 框架如何与 Android 中的 Loaders 一起使用?

4

4 回答 4

12

Loader 几乎可以封装任何东西,包括 Volley 请求。当您的 Loader 封装一个已经为您处理后台工作的框架并在主线程(如 Volley)上回调您时,您的加载程序实现不能从基类继承,AsyncTaskLoader而只能从Loader基类继承。然后,您将在该onForceLoad()方法中启动 Volley 请求。

当您的加载器通过回调将结果返回到主线程时,它只需要通过调用将其推送到 Activity/Fragment 即可deliverResult()

您的加载程序还需要保留对正在进行的 Volley 请求的引用,以便能够在onStopLoading(). onStopLoading() 不会在屏幕旋转等配置更改的情况下被调用,只有在离开 Activity 时才会调用。

唯一的缺点是 Loaders 没有内置机制来传播错误,而 Volley 有。因此,在 Loader 内部的 Volley 错误回调中,您需要提供 null 结果或发送本地广播以通知 Activity/Fragment 错误。

于 2014-04-20T00:10:37.140 回答
4

AFAIK 和我在源代码中看到,如果服务器发送正确的缓存headers(ETag),对您的请求的响应将被缓存,并且您第二次尝试向GET相同的 url 发出请求,您将获得来自 的响应cache,而不是再次调用Network。(默认情况下,Volley使用 as 缓存请求)。keyURL

添加RequestsRequestQueue应该从 完成MainThread,因为从后台调用它们是没有意义的Thread

于 2013-06-20T15:34:40.240 回答
3

我刚刚发布了一篇关于 Volley 的文章,它通过 Loader 模式集成到项目中。显示了高级方法。加载程序状态完全定义并显示在图表中。

文章: https: //plus.google.com/117981280628062796190/posts/8b9RmQvxudb

装载机状态图

于 2015-01-25T14:47:35.393 回答
1

可以通过 RequestFuture 类与 Volley 进行同步请求。我没有亲自研究过这个,但看起来你可以利用 Loader 来获得两全其美的效果(Volley's Cache 和 Loader 的加载稳定性)。

于 2013-08-30T19:58:06.910 回答