我有点喜欢Volley框架,但我仍然对它有些怀疑。
例如,Volley如何与Loader模式对齐?由于它的请求是以异步方式处理的,因此在后台调用它并没有多大意义。另一方面,如果我们忽略Loader模式,我们将取消加载并重新加载必要的资源,这有点浪费。
Volley框架如何与Android中的Loaders配合使用?
答案 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
答案 3 :(得分:1)
可以通过RequestFuture类与Volley进行同步请求。我没有仔细研究过这个问题,但看起来你可以利用Loader来充分发挥两个世界的优势(Volley's Cache与Loader的加载稳定性)。