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