11

我一直在阅读有关此事的Android文档(AsyncTaskThread)和vogella tutorial,但我还是有疑问。AsyncTask和Thread之间的真正区别

例如,我希望从Android应用程序发送消息到服务器。我想要处理它的回应。我应该使用什么?

我看过一些例子,他们为不阻塞UI创建了一个新的线程,但是这样我们没有进程的进度,你也必须在线程内处理响应,因为run()方法不返回任何东西。

AsyncTask似乎比Thread更好的选择,但我不知道是否有一些关于Android如何运行AsyncTask或线程的连续性。使用2个此功能

回答

22

请仔细阅读本博客

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 
4

一般是等价的,但的AsyncTask是在整合方面有GUI

+0

然而,Android文档说'AsyncTasks应该用于短操作(最多几秒钟)' – 2012-08-01 12:23:18

+0

yeas,因为你使用GUI和用户不想等待很长一段时间:) – 2012-08-01 12:25:42

+0

但是AsynTask将像一个独立的线程一样运行。他的工作不应该影响主线程(GUI)。或者我错了? – 2012-08-01 12:30:58

4

的AsyncTask更加简单使正确且容易使用的UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

你可以控制自己的功能

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

4
  • 我宁愿使用异步任务,因为它会让你知道什么时候 background process得到开始,在,当我可以parse 响应。
  • 异步有一个像onPreExecuteonPostExecute方法,这将使我们之前并调用后台 任务后完成的任务。
3

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

事情是 - AsyncTask是一种特殊的线程 - 一个是GUI线程,它在后台工作,也让你用GUI做点什么 - 它基本上是用函数“预编程”的onPreExecute(), do inBackground(), onPostExecute()

为了使Thread以这种方式工作,你必须编写一段代码。

+0

Loooot的代码是不需要的。使用处理程序是非常基本的 – afadfadf 2017-05-29 04:45:43

15

所有其他的答案在这里是不完整的,还有的AsyncTask和线程之间有很大的区别,即

线程可以从任何线程,主/ UI或背景被触发;但AsyncTask必须由主线程触发。

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

欲了解更多信息一般读Difference between Android Service,Thread,IntentService and AsyncTask

一般

主题

  • 长期任务。

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

的AsyncTask具有主线程进行通信

  • 小的任务。

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

相关问题