Android Volley + Loader模式?

时间:2013-06-05 10:57:53

标签: android android-loader android-volley

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

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

Volley框架如何与Android中的Loaders配合使用?

4 个答案:

答案 0 :(得分:12)

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

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

您的加载程序还需要保留对正在进行的Volley请求的引用,以便能够在onStopLoading()中取消它。只有在离开活动时,才会在屏幕旋转等配置更改时调用onStopLoading()。

唯一的缺点是装载机没有内置机制来传播错误,而Volley则有。因此,在您的Loader内部的Volley错误回调中,您需要传递空结果或发送本地广播以通知活动/片段错误。

答案 1 :(得分:4)

AFAIK和我在消息来源中看到,对您的请求的响应将被缓存, IF 服务器发送正确的缓存headers(ETag),第二次您将尝试要对同一个网址发出GET个请求,系统会向您提供cache的回复,而不是再次调用Network。(默认情况下为Volley个缓存使用key URL)的请求。

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

答案 2 :(得分:3)

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

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

Loader States Diagram

答案 3 :(得分:1)

可以通过RequestFuture类与Volley进行同步请求。我没有仔细研究过这个问题,但看起来你可以利用Loader来充分发挥两个世界的优势(Volley's Cache与Loader的加载稳定性)。