一个。下载管理器Api b。意向服务c。异步任务
请让我知道哪种是最佳做法。是否可以使用上述条款取消正在进行的下载,如果可以,请向我提供摘要。
答:下载管理器:
下载管理器是一项系统服务,可处理长时间运行的HTTP下载。客户端可以请求将URI下载到特定的目标文件。下载管理器将在后台进行下载,负责HTTP交互,并在出现故障或在连接更改和系统重新启动后重试下载。
因此,如果您不想为HTTP连接错误处理感到烦恼,而只想传递文件的源和目标,请使用DownloadManager。
您可以通过调用DownloadManager的remove(long...)
方法来取消下载。为此,您需要下载的ID
B:IntentService
IntentService是Services的基类,可按需处理异步请求(表示为Intent)。客户通过startService(Intent)
电话发送请求;服务会根据需要启动,使用工作线程依次处理每个Intent,并在工作耗尽时自行停止。
这种“工作队列处理器”模式通常用于从应用程序的主线程卸载任务。因此主要用于创建队列。
所有请求都在单个工作线程上处理-它们可能花费必要的时间(并且不会阻塞应用程序的主循环),但是一次仅处理一个请求。
您可以绑定到intentservice并创建一种取消或使下载出队的方法。
C:AsyncTasks
AsyncTasks专为无法运行UI线程的一次性耗时任务而设计。一个常见的示例是按下按钮时获取/处理数据。因此,对于长时间运行的下载而言,这不是最佳的解决方案。
您也可以使用AsyncTask取消下载。为此,您需要cancel()
使用asynctask的方法。在读取响应流的循环中,继续使用一些标志检查asynctask的cancel方法是否被调用。如果cancel方法被调用,则停止下载,否则继续下载。
希望您能通过此答案找到最好的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句