【问题标题】:Asynctask within service() or download manager to download the files from server服务()或下载管理器中的异步任务从服务器下载文件
【发布时间】:2015-10-08 20:38:40
【问题描述】:

我有一个 listView 并且单击每一行我必须下载一个 mp3 文件。我对 service() 中的 AsyncTask 和在 DownloadManager 中构建(API 9 以上)感到困惑。

但是,由于您自己处理对onStartCommand() 的每个调用,因此您可以同时执行多个请求。这不是本示例所做的,但如果这是您想要的,那么您可以为每个请求创建一个新线程并立即运行它们(而不是等待前一个请求完成)。

从文档的上述行中,我正在考虑在 onStartCommand 方法中创建 AsyncTask 的新实例,因此每个文件都将作为单独的任务下载,但在搜索时我遇到了 DownloadManagerr。我在文档中发现的关于它的信息很少。

我对 DownloadManager 有疑问。它是否像 IntentService 一样工作?有人请指导我使用什么(service()或DownloadManager中的AsyncTask)并请清除上述疑问。

【问题讨论】:

  • 如果你想要并行下载,你需要在 AsyncTask 中更改执行器,否则你会得到多个串行执行的 AsyncTask(默认)。
  • 嘿@gil 感谢您的回复。抱歉,我没有收到“在异步任务中更改执行者”
  • @gil 您能否提供上述场景的链接或一些代码片段。谢谢
  • 然后使用 executeOnExecutor() 执行任务

标签: android android-asynctask android-service android-download-manager


【解决方案1】:

service() 中的异步任务

实现此代码要容易得多,因为您只需创建一个服务并通过调用来启动它

startService(my_service);

但是作为开始服务,它可以在内存不足时由android停止(您的任务将失败)它可以由用户通过进入设置和第三个手动关闭如果手机关闭则可以关闭您无法恢复启动后你的任务

下载管理器

使用 DownloadManager,您必须设置一个 BrodcastReceiver ACTION_NOTIFICATION_CLICKED,但您可以更好地控制您的下载,因为此 API 专为下载目的而开发

优点:

  1. 下载 可以在您的单元重新启动后重新启动。
  2. 可以限制通过移动网络使用(仅限强制 wifi 下载)。

【讨论】:

  • 那么更好的选择是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2015-04-08
  • 1970-01-01
  • 2013-08-30
相关资源
最近更新 更多