下载一个大文件,使用AsyncTask或Thread哪个更好?

8
我在以下链接中找到了一个下载大文件的示例:http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples/Downloader,看起来很不错(我还没有测试过)。但是我也在stackoverflow上阅读了一些帖子,使用AsyncTask类而不是像上面的示例那样使用Thread类来完成相同的事情。
我想知道的是,为了实现文件下载,我应该使用哪种方法?如果AsyncTask更好,你能否给我提供一个示例代码?
4个回答

7

声明:我不是Android开发人员,答案来自一般经验。

Thread类最适合长时间运行的任务,而不适合异步任务。除非您管理工作线程池,但线程的生命周期与应用程序相同或几乎相同。请注意,创建线程是昂贵的操作。

AsyncTasks和其他辅助程序通常用于您想在后台执行的某些单个活动,以免阻止应用程序运行。它们通常由平台进行良好的管理并且廉价。

我的意见是:如果您只偶尔要加载页面,请使用AsyncTask。如果您的应用程序需要经常在后台加载页面,请考虑使用Thread。


1
我正在写一个答案,但这就是我将要写的。所以+1。 - Cristian
2
作为一名实际的Android开发者,我只能说完全正确。如果您只下载一个文件,请使用异步任务;如果您需要不断地下载和上传,则使用线程或服务...好答案Andrey。 - Janusz
谢谢大家!我会使用AsyncTask类。 - Yoo Matsuo
2
AsyncTask非常有用,可以在任务完成后更新UI。它不会阻塞您的UI(Activity)。如果您计划在长时间运行的情况下使用Thread,则最好创建一个服务来持有该线程。 - qrtt1

1
为了理解应该使用什么,我们必须了解即将执行的任务的性质。假设我们要下载大文件.... 作为用户,你想看到它还是让它在后台运行?我想我不介意在后台运行这个任务(除非是游戏并且正在下载一些图形)。
考虑到这一点,如果我们使用Asyntask,用户必须保持应用程序打开,直到下载操作完成;因为四个Asynctask方法中有三个在UI线程上运行。(查看链接: https://developer.android.com/reference/android/os/AsyncTask) 在另一种情况下,我们使用Asynctask来下载游戏的图形文件,则完全可以选择它。
因此,我认为最好选择Thread,甚至更好的是选择Service来下载内容,以便可以继续在应用程序上工作/关闭应用程序或甚至运行其他应用程序。

0

这两个选项在下载过程中(当用户切换到另一个应用程序时)被杀死的概率相等。然而,AsyncTask 更加简洁。对于下载大文件,请考虑使用 Service


0

Android 3.0之前的AsyncTasks使用后台线程池执行任务,但在3.0之后的版本中,只使用单个线程来执行AsyncTasks。

如果您需要同时发出许多请求,并且您的Android版本高于3.0,请使用线程池。但是,如果您只需要进行单个下载(不考虑Android版本),请使用AsyncTask,它将在单个后台线程上执行而无需管理自己的线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接