2

一个。下载管理器 API b. 意向服务 C. 异步任务

请让我知道哪个是最佳做法。是否可以使用上述条款取消正在进行的下载,如果可以,请向我提供片段。

4

1 回答 1

10

答:下载管理器:

下载管理器是处理长时间运行的 HTTP 下载的系统服务。客户端可能会请求将 URI 下载到特定的目标文件。下载管理器将在后台进行下载,处理 HTTP 交互并在失败或跨连接更改和系统重新启动后重试下载。

因此,如果您不想为 HTTP 连接错误处理而头疼,而只想传递文件的源和目标,那么请使用 DownloadManager。

您可以通过调用 DownloadManager 的remove(long...)方法取消下载。为此,您需要下载的 ID

B:意向服务

IntentService 是按需处理异步请求(表示为 Intent)的服务的基类。客户端通过调用发送请求startService(Intent);该服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。

这种“工作队列处理器”模式通常用于从应用程序的主线程中卸载任务。因此主要用于创建队列。

所有请求都在单个工作线程上处理——它们可能需要尽可能长的时间(并且不会阻塞应用程序的主循环),但一次只会处理一个请求。

您可以绑定到意图服务并创建一个方法来取消或取消下载下载。

C:异步任务

AsyncTasks 专为无法在 UI 线程运行的一次性耗时任务而设计。一个常见的例子是在按下按钮时获取/处理数据。因此,对于长时间运行的下载来说,这不是一个更好的解决方案。

您也可以使用 AsyncTask 取消下载。为此,您需要cancel()使用 asynctask 的方法。在读取响应流的循环中,继续使用一些标志检查是否调用了异步任务的取消方法。如果调用取消方法,则停止下载,否则继续。

我希望你能通过这个答案找到最好的方法。

于 2013-10-29T06:58:17.960 回答