一、为什么要使用异步任务类?
Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler对象向UI线程发送消息,完成界面的更新,
这种方式对整个界面的控制非常精细。
但是也有缺点,例如代码臃肿,所以为了简化操作,Android 1.5 sdk 提供了一个工具类 AsyncTask(异步任务类),
使得创建异步任务变的更加简单。
二、异步任务类的实现
异步类实现计数演示过程:
首先在 主Activity文件中:(主Activity用来解析程序的第一个界面)
1. 创建异步类任务的对象,并给异步类的构造传递一个文本对象的引用,这样在异步任务中能操作这个文本框;
2. 使用异步类对象的引用调用 execute(Params .. Params)方法,执行异步任务。也即进入了我们创建的异步任务中去执行;
说明:
execute()可以传递多个参数,传递的参数类型受异步类的第一个参数类型决定,如果异步类的第一个参数类型为Integer类型,
那么execute传递的参数就必须是整型的,以此类推;
在异步类用doInBackground(Integer ... params)方法来接收execute传递的参数,这种参数的写法表示,用来接收多个传递来
的参数,都保存在数组params[ ]中,params[0]表示传递的第一个参数,以此类推;
主Activity代码如下:
进入了我们创建的异步任务中:
首先介绍一下这个异步任务类的创建及相应参数说明:
a. 在创建AsyncTask类(异步任务类)的时候,要设定数据类型;(称为Android的泛型编程)
参数说明:
b. 通俗说一下参数:
第一个参数的类型,就是我们在执行execute()方法时要传递的参数类型,还有接收该参数的方法doInBackground()的参数类型保持一致;
第二个参数的类型,就是onProgressUpdate(..)方法接收publicProgress()方法传递数据对应的类型;
第三个参数的类型,就是接收doInBackground()方法的返回值的类型;
3. 在execute方法执行后,也即启动了异步任务,onPreExecute()方法立即被执行;
4. 在onPreExecute()执行完成后,立即执行doInBackground()方法;
该方法的说明:
a. 该方法被子线程调用;
b. 将耗时的操作放在该方法中;
c. 在该方法中,通过异步类的对象调用publishProgress()该方法,要求系统自动调用onProgressUpdate()方法;类似handle的用法;
d. 该方法的返回值,赋值给了类的第三个参数Result;
5. 由于上面调用了publishProgress()该方法,会要求系统的UI主线程自动调用onProgressUpdate()方法;
a. 该方法被UI主线程调用;
异步任务效果图:
异步任务实现列表的刷新:
实现代码: