DownloadManager vs后台服务

时间:2017-11-23 12:57:04

标签: android android-download-manager

我需要下载多个图像和视频,并且要求需要“一次”下载,因此不需要任何缓存,这就是我不使用Volley的原因。视频的排球可能很昂贵。

接下来,我偶然发现了内置的Android DownloadManager,它似乎有助于在队列中下载,整体API似乎并不差,但我想知道它与使用Service的比较使用ScheduledThreadPoolExecutor一个由Commonsware的帖子决定的选项)?

注意:我的用例严格下载网格图片,可能会有重复请求。我的请求只能是单次下载。该请求可能是少量图片和视频的混合。

ScheduledThreadPoolExecutor内的Service可能明显更快吗?

1 个答案:

答案 0 :(得分:6)

  

我想知道[DownloadManager]与ServiceScheduledThreadPoolExecutor

的比较

DownloadManager不要求您的进程正在运行,它会处理重试策略等所有问题。另一方面,DownloadManager

  • 要求从简单的URL启动下载(即没有会话cookie)

  • 通过下载应用

  • 向用户显示结果
  • 只能轻松下载到外部存储

  • 一次下载一项

  • 可能会暂停下载开始一段时间(例如,如果正在下载其他内容)

ScheduledThreadPoolExecutor不太可能是进程内解决方案的一部分,尽管可能ThreadPoolExecutor。只有在您需要尝试一次下载N个视频并且您不想使用HTTP客户端API提供的任何多线程选项(例如,OkHttp)时,才需要这样做。由于你想在后台下载这些东西(大概),而你不知道用户在前台做了什么,我建议你一次只下载一个视频,这样你就不会让用户难以使用从前台发生的事情来看互联网。

  

Service内的ScheduledThreadPoolExecutor可以明显更快吗?

你正在比较苹果和小行星。

ScheduledThreadPoolExecutorService都不执行HTTP下载。进程内HTTP客户端API(HttpUrlConnection,OkHttp,Volley等)执行HTTP下载,一些进程外选项(特别是DownloadManager)也是如此。 正确的比较将在DownloadManager和以下组合之间进行:

  • 进程内HTTP客户端API和
  • 某种形式的服务,即使用户离开您的用户界面也允许继续下载

从纯粹的速度角度来看,任何HTTP客户端API都将受到网络的限制,因此应该大致相同地执行。 Volley不适合大型下载,因为它将整个结果放在内存中,并且您没有视频的堆空间。其他选项可让您将结果流式传输到文件。