线程只要分为:主线程和子线程主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作,由于Android的特性,如果在主线程中执行耗时操作那么就会导致程序无法及时响应,因此耗时操作必须方法子线程中去执行.
AsyncTask
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递到主线程并在主线程中更新UI.从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以更加方便地执行后台任务以及在主线程中访问UI,但是AsyncTask并不适合执行特别耗时的后台任务。AsyncTask是一个抽象的泛型类,所以如果我们想要使用它,就必须创建一个子类去继承它,在继承时我们可以为AsyncTask类指定三个泛型类。

Params在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
Progress后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位
Result当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。一个简单的自定义AsyncTask可以写成如下:

AsyncTask的工作原理
为了分析AsyncTask的工作原理,我们从他的execute方法开始分析,execute()方法会调用executeOnExecutor方法


从上面的代码中,sDefaultExecutor实际上是一个串行的线程池,一个进程中所有的AsyncTask全部在这个串行的线程中排队执行,这个排队执行的过程后面再进行分析。在executeOnExecutor方法中,AsyncTask的onpreExecute方法最先执行,然后线程池开始执行。

原文链接:http://www.jianshu.com/p/685f584db344

posted on 2016-05-09 21:22  Daisy徐然  阅读(143)  评论(0编辑  收藏  举报