http://crazyaboutandroid.blogspot.in/2011/12/difference-between-android.html
以下是详细内容: Android Service、Thread、IntentService 和 AsyncTask 的区别 何时使用? Service: 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
这里的所有其他答案都不完整,AsyncTask和Thread之间存在很大的区别,即
Thread可以从任何线程触发,包括主(UI)线程或后台线程; 但是AsyncTask必须从主线程触发。
此外,在Android低级API(不确定,可能是API级别<11)中,只能执行一次AsyncTask实例。
有关更多信息,请阅读Android Service、Thread、IntentService和AsyncTask之间的区别
一般来说
Thread
一般用于长时间任务。
对于并行任务使用多线程(传统机制)
AsyncTask
用于需要与主线程通信的小任务
对于并行任务使用多个实例或Executor
一般来说,使用这两个特性是等价的,但是AsyncTask在与GUI集成方面更加简单。
AsyncTask可以正确且轻松地使用UI线程。通过这个类,你可以在后台执行操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
你可以控制它自己的函数
doInBackground(Params... params), onCancelled(), onPostExecute(Result result), onPreExecute(), nProgressUpdate(Progress... values), publishProgress(Progress... values)
后台进程
何时开始和结束以及何时可以解析
响应结果。onPreExecute
和onPostExecute
等方法,这些方法允许我们在调用后台任务之前和之后执行任务。AsyncTask
可以正确且轻松地使用UI线程。- 来自开发者。
事实上,AsyncTask
是一种特殊的线程 - 它是GUI线程,可以在后台工作,并让您对GUI进行操作 - 基本上它已经为您“预编程”了一些函数:onPreExecute(),doInBackground(),onPostExecute()
。
为了使Thread
以这种方式工作,您必须编写大量代码。
AsyncTask
适用于小任务,而Thread
适用于长任务?为什么一个人不应该将AsyncTask
用于长任务? - Bugs Happen