AsyncTask 对比与 Thread+Handler

Posted Could_Deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AsyncTask 对比与 Thread+Handler相关的知识,希望对你有一定的参考价值。

引言:

我不太同意封装好就会影响性能的说法,在我实际的运用中,真正的缺点来自于AsyncTask的全局线程池只有5个工作线程,也就是说,一个APP如果运用AsyncTask技术来执行线程,那么同一时间最多只能有5个线程同时运行,其他线程将被阻塞(注:不运用AsyncTask执行的线程,也就是自己new出来的线程不受此限制),所以AsyncTask不要用于多线程取网络数据,因为很可能这样会产生阻塞,从而降低效率。

 

 

AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute()、onPostExecute()及更新UI方法onProgressUpdate()均运行在主线程中,这样就不用Handler发消息处理了;

 

android中实现异步任务机制有两种方式,Handler和AsyncTask

 

 

AsyncTask:

一个异步任务的执行一般包括以下几个步骤:

1.execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。

2.onPreExecute(),在execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。

3.doInBackground(Params... params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。

4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。

5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。

 

以上是关于AsyncTask 对比与 Thread+Handler的主要内容,如果未能解决你的问题,请参考以下文章

不间断运行服务 - Thread,AsyncTask还是Executor?

AsyncTask 和 Thread 之间的真正区别

AsyncTask 和 Thread 区别

android中asynctask和thread的区别

AsyncTask 和 Thread/Runnable 的区别

在 Asynctask 中使用 Thread.sleep 时出错