AsyncTask和Thread之间的真正区别

时间:2012-08-01 11:53:54

标签: android multithreading android-asynctask difference asynctaskloader

我一直在阅读关于此事的Android文档(AsyncTaskThread)和vogella tutorial,但我还是有疑问。

例如,我想从Android应用程序向服务器发送消息。我希望这个过程能够做出回应。我该怎么用?

我见过他们为非阻止用户界面创建新Thread的示例,但这样我们就没有进程的进度,你也必须在Thread内处理响应因为run()方法没有返回任何内容。

AsyncTask似乎比Thread更好,但我不知道使用AsyncTask代替Thread会产生什么后果。

6 个答案:

答案 0 :(得分:26)

请阅读此博客

http://crazyaboutandroid.blogspot.in/2011/12/difference-between-android.html

和细节是:

Android服务,线程,IntentService和AsyncTask之间的区别

何时使用?

服务

   Task with no UI, but shouldn't be too long. Use threads within service for long tasks.

- Long task in general.

- For tasks in parallel use Multiple threads (traditional mechanisms)

<强>的AsyncTask

- Small task having to communicate with main thread.

- For tasks in parallel use multiple instances OR Executor 

答案 1 :(得分:18)

此处的所有其他答案都不完整,AsyncTask和Thread之间存在很大差异,即

可以从任何线程,主(UI)或后台触发线程;但必须从主线程触发AsyncTask。

此外,在Android的较低API(不确定,可能是API级别&lt; 11)上,AsyncTask的一个实例只能执行一次。

有关详细信息,请参阅Difference between Android Service, Thread, IntentService and AsyncTask

一般

<强>发

  • 一般的长期任务。

  • 对于并行使用的任务,使用多线程(传统机制)

<强>的AsyncTask

  • 必须与主线程进行通信的小任务。

  • 对于并行任务,请使用多个实例或执行者

答案 2 :(得分:4)

一般使用2这个功能是等价的,但AsyncTask在与GUI的集成方面更简单

答案 3 :(得分:4)

  

AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

您可以控制自己的功能

  

doInBackground(Params ... params),   onCancelled()   onPostExecute(结果结果),   onPreExecute()   nProgressUpdate(进度...值),   publishProgress(Progress ... values)

答案 4 :(得分:4)

  • 我更喜欢使用异步任务,因为它会让你知道什么时候 background process 已启动,我何时能parse 回应。
  • 异步包含onPreExecuteonPostExecute等方法,可让我们在调用背景之前和之后执行任务 任务。

答案 5 :(得分:3)

AsyncTask enables proper and easy use of the UI thread. - 来自Developer

问题是 - AsyncTask是一种特殊的Thread - 一种是GUI线程,它在后台工作,也让你用GUI做一些事情 - 它基本上是用函数“预编程”的{ {1}}。

为了使onPreExecute(), do inBackground(), onPostExecute()以这种方式工作,你必须编写一段代码。