我一直在阅读关于此事的Android文档(AsyncTask,Thread)和vogella tutorial,但我还是有疑问。
例如,我想从Android应用程序向服务器发送消息。我希望这个过程能够做出回应。我该怎么用?
我见过他们为非阻止用户界面创建新Thread
的示例,但这样我们就没有进程的进度,你也必须在Thread
内处理响应因为run()
方法没有返回任何内容。
AsyncTask
似乎比Thread
更好,但我不知道使用AsyncTask
代替Thread
会产生什么后果。
答案 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
回应。onPreExecute
和onPostExecute
等方法,可让我们在调用背景之前和之后执行任务
任务。答案 5 :(得分:3)
AsyncTask enables proper and easy use of the UI thread.
- 来自Developer。
问题是 - AsyncTask是一种特殊的Thread - 一种是GUI线程,它在后台工作,也让你用GUI做一些事情 - 它基本上是用函数“预编程”的{ {1}}。
为了使onPreExecute(), do inBackground(), onPostExecute()
以这种方式工作,你必须编写一段代码。