一个。下载管理器 API b. 意向服务 C. 异步任务
请让我知道哪个是最佳做法。是否可以使用上述条款取消正在进行的下载,如果可以,请向我提供片段。
一个。下载管理器 API b. 意向服务 C. 异步任务
请让我知道哪个是最佳做法。是否可以使用上述条款取消正在进行的下载,如果可以,请向我提供片段。
答:下载管理器:
下载管理器是处理长时间运行的 HTTP 下载的系统服务。客户端可能会请求将 URI 下载到特定的目标文件。下载管理器将在后台进行下载,处理 HTTP 交互并在失败或跨连接更改和系统重新启动后重试下载。
因此,如果您不想为 HTTP 连接错误处理而头疼,而只想传递文件的源和目标,那么请使用 DownloadManager。
您可以通过调用 DownloadManager 的remove(long...)
方法取消下载。为此,您需要下载的 ID
B:意向服务
IntentService 是按需处理异步请求(表示为 Intent)的服务的基类。客户端通过调用发送请求startService(Intent)
;该服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。
这种“工作队列处理器”模式通常用于从应用程序的主线程中卸载任务。因此主要用于创建队列。
所有请求都在单个工作线程上处理——它们可能需要尽可能长的时间(并且不会阻塞应用程序的主循环),但一次只会处理一个请求。
您可以绑定到意图服务并创建一个方法来取消或取消下载下载。
C:异步任务
AsyncTasks 专为无法在 UI 线程运行的一次性耗时任务而设计。一个常见的例子是在按下按钮时获取/处理数据。因此,对于长时间运行的下载来说,这不是一个更好的解决方案。
您也可以使用 AsyncTask 取消下载。为此,您需要cancel()
使用 asynctask 的方法。在读取响应流的循环中,继续使用一些标志检查是否调用了异步任务的取消方法。如果调用取消方法,则停止下载,否则继续。
我希望你能通过这个答案找到最好的方法。