Android 要下载大文件,使用AsyncTask或Thread哪个方法更好?

Android 要下载大文件,使用AsyncTask或Thread哪个方法更好?,android,Android,我在下面的链接中找到了一个下载大型数据文件的示例, 它看起来很不错(我还没有测试过)。但是我也读过stackoverflow上的一些文章,通过使用AsyncTask类来做同样的事情,而不是像上面的示例那样使用Thread类 我想知道的是,我应该用哪一个来实现下载文件?若AsyncTask更好,你们能给我一个示例代码吗?免责声明:我不是Android开发者,答案来自一般经验 线程类最适合于长时间运行的活动,而不是异步任务。除非您管理工作线程池,但线程的生存期仍然和应用程序相同或几乎相同。考虑线程

我在下面的链接中找到了一个下载大型数据文件的示例,

它看起来很不错(我还没有测试过)。但是我也读过stackoverflow上的一些文章,通过使用AsyncTask类来做同样的事情,而不是像上面的示例那样使用Thread类


我想知道的是,我应该用哪一个来实现下载文件?若AsyncTask更好,你们能给我一个示例代码吗?

免责声明:我不是Android开发者,答案来自一般经验

线程类最适合于长时间运行的活动,而不是异步任务。除非您管理工作线程池,但线程的生存期仍然和应用程序相同或几乎相同。考虑线程的创建是昂贵的操作。

AsyncTasks和其他帮助程序通常用于您希望在后台执行的某些单个活动,以避免阻止应用程序。它们通常由平台进行良好管理,而且价格低廉


我的意见是:如果希望偶尔加载页面,请使用AsyncTask。如果你的应用程序总是在后台加载页面,考虑线程。

这两个选项在下载正在进行中(当用户切换到另一个应用程序时)有相等的被杀死的概率。尽管如此,
AsyncTask
还是没有那么混乱。对于下载大文件,考虑使用<代码>服务<代码>。在3版本之前的Android版本中,

< Py>异步任务使用后台的线程池来执行任务,但是在3之后的版本中,使用一个线程来执行异步任务。


如果您需要同时发出大量请求,并且您的Android版本高于3.0,请使用线程池,但如果您只需要进行一次下载(不考虑Android版本),请使用AsyncTask,它将在单个后台线程上执行,不会出现问题,比自己管理线程更容易。

要理解要使用什么,必须了解我们将要执行的任务的性质。 假设我们要下载一个大文件。。。。作为一个用户,你想看到它还是让它在后台运行??我想我不介意在后台运行该任务(除非是游戏和一些图形正在下载)

考虑到这一点,如果我们使用Asyntask,用户必须保持应用程序打开,直到下载操作完成;AsyncTask的四个方法中有三个在UI线程上运行。(查看链接:) 在另一种情况下,我们使用AsyncTask下载游戏的图形文件,完全可以使用它


因此,我认为最好使用Thread或甚至更好的服务来下载内容,这样可以继续在应用程序上进一步工作/关闭应用程序,甚至运行其他应用程序。

我正在写一个答案,但这就是我要写的。所以+1。作为一个真正的Android开发者,我只能说完全正确。如果您只下载一个文件,请执行异步任务;如果您不断下载和上载,请执行线程或服务。。。回答得好,安德烈谢谢大家!我将使用AsyncTask类。AsyncTask对于在任务完成后更新UI非常有用。它不会阻止您的UI(活动)。如果您计划在长时间运行的情况下使用线程,那么最好创建一个服务来保存线程。