我需要下载多个图像和视频,并且要求需要“一次”下载,因此不需要任何缓存,这就是我不使用Volley的原因。视频的排球可能很昂贵。
接下来,我偶然发现了内置的Android DownloadManager,它似乎有助于在队列中下载,整体API似乎并不差,但我想知道它与使用Service
的比较使用ScheduledThreadPoolExecutor
(一个由Commonsware的帖子决定的选项)?
注意:我的用例严格不下载网格图片,可能会有重复请求。我的请求只能是单次下载。该请求可能是少量图片和视频的混合。
ScheduledThreadPoolExecutor
内的Service
可能明显更快吗?
答案 0 :(得分:6)
我想知道[
的比较DownloadManager
]与Service
和ScheduledThreadPoolExecutor
DownloadManager
不要求您的进程正在运行,它会处理重试策略等所有问题。另一方面,DownloadManager
:
要求从简单的URL启动下载(即没有会话cookie)
通过下载应用
只能轻松下载到外部存储
一次下载一项
可能会暂停下载开始一段时间(例如,如果正在下载其他内容)
ScheduledThreadPoolExecutor
不太可能是进程内解决方案的一部分,尽管可能ThreadPoolExecutor
。只有在您需要尝试一次下载N个视频并且您不想使用HTTP客户端API提供的任何多线程选项(例如,OkHttp)时,才需要这样做。由于你想在后台下载这些东西(大概),而你不知道用户在前台做了什么,我建议你一次只下载一个视频,这样你就不会让用户难以使用从前台发生的事情来看互联网。
Service内的ScheduledThreadPoolExecutor可以明显更快吗?
你正在比较苹果和小行星。
ScheduledThreadPoolExecutor
和Service
都不执行HTTP下载。进程内HTTP客户端API(HttpUrlConnection
,OkHttp,Volley等)执行HTTP下载,一些进程外选项(特别是DownloadManager
)也是如此。
正确的比较将在DownloadManager
和以下组合之间进行:
从纯粹的速度角度来看,任何HTTP客户端API都将受到网络的限制,因此应该大致相同地执行。 Volley不适合大型下载,因为它将整个结果放在内存中,并且您没有视频的堆空间。其他选项可让您将结果流式传输到文件。