Android异步任务类分析

来源:互联网 发布:多标签分类算法 编辑:程序博客网 时间:2024/04/28 06:41
一、为什么要使用异步任务类? 

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主线程调用;
        b. 在调用publishProgress()方法时,可以传递参数给onProgressUpdate(Integer... values);values[]数组来接收传递的参数,
           用来将结果显示在UI控件上;

6. 当后台操作结束时,onPostExecute()方法会被自动调用,类的第三个参数Result的结果会传递到此方法中,可以将Result的结果显示在
   UI控件上;

异步任务类代码如下:

异步任务效果图: 





异步任务实现列表的刷新:


实现代码:



1 0
原创粉丝点击