18

我一直在阅读有关此问题的 Android 文档(AsyncTaskThread)和vogella 教程,但我仍有疑问。

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

我已经看到了他们创建一个新Thread的不阻塞 UI 的示例,但是这样我们就没有进程的进度,而且您必须在其中处理响应,Thread因为该run()方法不返回任何内容。

AsyncTask似乎比 更好的选择Thread,但我不知道使用 aAsyncTask而不是 a的后果是什么Thread

4

6 回答 6

32

请阅读此博客

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

和细节是:

Android Service、Thread、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)

异步任务

- Small task having to communicate with main thread.

- For tasks in parallel use multiple instances OR Executor 
于 2013-10-05T12:44:31.897 回答
21

这里所有其他的答案都不完整,AsyncTask和Thread有很大区别,即

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

同样在 Android 的较低 API(不确定,可能 API 级别 < 11)上,一个 AsyncTask 实例只能执行一次。

有关更多信息,请阅读Android Service、Thread、IntentService 和 AsyncTask 之间的区别

一般来说

线

  • 任务一般很长。

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

异步任务

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

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

于 2013-02-08T20:33:29.507 回答
4

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

你可以控制它自己的功能

doInBackground(参数...参数),onCancelled(),onPostExecute(结果结果),onPreExecute(),nProgressUpdate(进度...值),publishProgress(进度...值)

于 2012-08-01T11:59:58.527 回答
4
  • 我更喜欢使用异步任务,因为它会让您知道何时 开始和结束以及何时可以 响应。background processparse
  • Async有类似onPreExecuteand的方法,onPostExecute它允许我们在调用后台任务之前和之后执行任务。
于 2012-08-01T12:00:58.447 回答
4

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

于 2012-08-01T11:58:05.170 回答
3

AsyncTask enables proper and easy use of the UI thread.- 来自开发者

问题是 - AsyncTask 是一种特殊的线程 - 它是一个 GUI 线程,它在后台工作,还可以让你用 GUI 做一些事情 - 它基本上是为你“预编程”的函数onPreExecute(), do inBackground(), onPostExecute()

为了以Thread这种方式工作,您必须编写大量代码。

于 2012-08-01T12:01:23.203 回答