Android 安卓截击+;装载机模式?

Android 安卓截击+;装载机模式?,android,android-loader,android-volley,Android,Android Loader,Android Volley,我有点喜欢截击框架,但我仍然对它有一些怀疑 例如,截击如何与加载器模式对齐?因为它的请求是以异步方式处理的,所以在后台调用它没有多大意义。另一方面,如果忽略加载程序模式,我们将取消加载并重新加载必要的资源,这是一种浪费 Volley framework如何与Android中的加载程序协同工作?AFAIK和我在源代码中看到,如果服务器发送正确的缓存头(ETag),那么对您请求的响应将被缓存,并且第二次您将尝试向同一url发出GET请求,您将从缓存获得响应,而不是再次调用网络。(默认情况下截取使用a

我有点喜欢截击框架,但我仍然对它有一些怀疑

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


Volley framework如何与Android中的加载程序协同工作?

AFAIK和我在源代码中看到,如果服务器发送正确的缓存
头(ETag),那么对您请求的响应将被缓存,并且第二次您将尝试向同一url发出
GET
请求,您将从
缓存
获得响应,而不是再次调用
网络
。(默认情况下
截取
使用as
缓存请求


请求
添加到
请求队列
应该从
主线程
完成,因为从后台
线程调用它们是没有意义的
可以通过RequestFuture类发出同步请求。我还没有亲自研究过这一点,但是看起来你可以通过一个加载器来充分利用这一点(Volley的缓存和加载器的加载稳定性)。

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

当加载程序通过回调将结果返回主线程时,它只需要调用
deliverResult()
将其推送到活动/片段

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


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

我刚刚发表了一篇关于截击和it集成到project over Loader模式的文章。显示了高级方法。加载器状态在图表中完全定义和显示

第条:


我在考虑一种情况,即用户在加载时旋转设备。Volley框架的正常行为是取消请求,并在方向更改完成时重新启动它们。使用加载程序模式将保护加载状态不受方向更改的影响。是的。你说得对。没有直接的、开箱即用的方法来“重新连接”到挂起的请求,或者“保持它”运行并在方向更改/活动停止-恢复时获得响应。在显示推送通知之前加载其他信息等情况下,从后台线程调用它是有意义的。但是,出于一般目的,最好从主线程调用它。这样,
加载程序就不能同时返回中间结果和最终结果
RequestFuture
仅返回第一个接收到的结果(如果使用缓存,则返回中间结果);最终结果只是更新缓存,不能传播到UI。这一点很好。在这一点上,我不建议使用加载器,我认为它们有太多的开销,最好从外部库(如改装或截取)创建您自己的解决方案。不需要同步请求。如果您扩展
加载程序
,您仍然需要在后台线程中执行工作。Pius,如果您有多个需要执行的请求,那么在一个异步线程中执行这些请求比在一个异步线程中执行调用链要干净得多。实际上,不能在AsyncLoader中异步使用Volley,因为如果没有从主线程调用它,它会抛出一个错误。