Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中下载一个文件或多个文件的最佳实践是什么。。。?_Android_Android Asynctask_Intentservice_Android Download Manager - Fatal编程技术网

在Android中下载一个文件或多个文件的最佳实践是什么。。。?

在Android中下载一个文件或多个文件的最佳实践是什么。。。?,android,android-asynctask,intentservice,android-download-manager,Android,Android Asynctask,Intentservice,Android Download Manager,a。下载管理器Api B意向服务 C异步任务 请让我知道哪种做法是最好的。是否可以使用上述条款取消正在进行的下载,如果可以,请提供代码片段 下载管理器: 下载管理器是一种处理长期运行的HTTP下载的系统服务。客户端可以请求将URI下载到特定的目标文件。下载管理器将在后台进行下载,负责HTTP交互,并在出现故障或连接更改和系统重新启动后重试下载 所以,若您不想处理HTTP连接错误,只想传递文件的源和目标,那个么就使用DownloadManager 您可以通过DownloadManager调用其re

a。下载管理器Api B意向服务 C异步任务


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

下载管理器:

下载管理器是一种处理长期运行的HTTP下载的系统服务。客户端可以请求将URI下载到特定的目标文件。下载管理器将在后台进行下载,负责HTTP交互,并在出现故障或连接更改和系统重新启动后重试下载

所以,若您不想处理HTTP连接错误,只想传递文件的源和目标,那个么就使用DownloadManager

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

B:IntentService

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

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

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

您可以绑定到intentservice并创建一个方法来取消下载或取消下载队列

C:AsyncTasks

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

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


我希望你能从这个答案中找到最好的答案。

+1的答案,即使问题与通常拒绝此类问题的SO政策不匹配“什么是最好的……好吧。。我明白了。使用下载管理器可以进行多次下载。所以,您可以为我提供一些使用下载管理器api取消下载的示例片段。提前感谢……)上传@HardikTrivedi怎么样