我有点喜欢 Volley 框架,但我仍然对它有些怀疑。
例如,Volley 是如何与 Loader 模式对齐的?由于它的请求是以异步方式处理的,因此在后台调用它没有多大意义。另一方面,如果我们忽略 Loader 模式,我们将取消加载并重新加载必要的资源,这有点浪费。
Volley 框架如何与 Android 中的 Loaders 一起使用?
我有点喜欢 Volley 框架,但我仍然对它有些怀疑。
例如,Volley 是如何与 Loader 模式对齐的?由于它的请求是以异步方式处理的,因此在后台调用它没有多大意义。另一方面,如果我们忽略 Loader 模式,我们将取消加载并重新加载必要的资源,这有点浪费。
Volley 框架如何与 Android 中的 Loaders 一起使用?
Loader 几乎可以封装任何东西,包括 Volley 请求。当您的 Loader 封装一个已经为您处理后台工作的框架并在主线程(如 Volley)上回调您时,您的加载程序实现不能从基类继承,AsyncTaskLoader
而只能从Loader
基类继承。然后,您将在该onForceLoad()
方法中启动 Volley 请求。
当您的加载器通过回调将结果返回到主线程时,它只需要通过调用将其推送到 Activity/Fragment 即可deliverResult()
。
您的加载程序还需要保留对正在进行的 Volley 请求的引用,以便能够在onStopLoading()
. onStopLoading() 不会在屏幕旋转等配置更改的情况下被调用,只有在离开 Activity 时才会调用。
唯一的缺点是 Loaders 没有内置机制来传播错误,而 Volley 有。因此,在 Loader 内部的 Volley 错误回调中,您需要提供 null 结果或发送本地广播以通知 Activity/Fragment 错误。
AFAIK 和我在源代码中看到,如果服务器发送正确的缓存headers
(ETag),对您的请求的响应将被缓存,并且您第二次尝试向GET
相同的 url 发出请求,您将获得来自 的响应cache
,而不是再次调用Network
。(默认情况下,Volley
使用 as 缓存请求)。key
URL
添加Requests
到RequestQueue
应该从 完成MainThread
,因为从后台调用它们是没有意义的Thread
。
我刚刚发布了一篇关于 Volley 的文章,它通过 Loader 模式集成到项目中。显示了高级方法。加载程序状态完全定义并显示在图表中。
文章: https: //plus.google.com/117981280628062796190/posts/8b9RmQvxudb
可以通过 RequestFuture 类与 Volley 进行同步请求。我没有亲自研究过这个,但看起来你可以利用 Loader 来获得两全其美的效果(Volley's Cache 和 Loader 的加载稳定性)。