我有点喜欢Volley框架,但对它仍然有一些疑虑。
例如,Volley框架如何与Loader模式相匹配?由于其请求以异步方式处理,因此在后台调用它并没有太多意义。另一方面,如果我们忽略Loader模式,则会取消加载并重新加载必要的资源,这有点浪费。
Volley框架如何在Android中与Loader一起工作?
我有点喜欢Volley框架,但对它仍然有一些疑虑。
例如,Volley框架如何与Loader模式相匹配?由于其请求以异步方式处理,因此在后台调用它并没有太多意义。另一方面,如果我们忽略Loader模式,则会取消加载并重新加载必要的资源,这有点浪费。
Volley框架如何在Android中与Loader一起工作?
Loader 可以封装几乎任何东西,包括 Volley 请求。当您的 Loader 封装了一个已经为您处理后台工作并在主线程上回调您的框架(例如 Volley)时,您的 Loader 实现不能继承自 AsyncTaskLoader
,而只能继承自 Loader
基类。然后,您可以在 onForceLoad()
方法中启动 Volley 请求。
当您的 Loader 通过回调在主线程上收到结果时,只需要调用 deliverResult()
将结果推送到 Activity/Fragment。
您的 Loader 还需要保持对正在进行的 Volley 请求的引用,以便在 onStopLoading()
中取消它。仅在离开 Activity 时才会调用 onStopLoading(),而不会在屏幕旋转等配置更改时调用。
唯一的缺点是 Loader 没有内置机制来传播错误,而 Volley 有。因此,在您的 Loader 内部的 Volley 错误回调中,您需要传递空结果或发送本地广播来通知 Activity/Fragment 发生错误。
通过RequestFuture类,可以使用Volley进行同步请求。我个人没有深入研究过这一点,但看起来你可以利用它与Loader结合使用,以获得最佳效果(既有Volley的缓存功能,又具备Loader的加载稳定性)。
Loader<D>
,则预计您会在后台线程中执行工作。 - Pijusn