安卓异步任务类AsyncTask——突出一个简单、好用

本文详细介绍了Android中的AsyncTask类,包括其工作原理、泛型定义、关键方法的作用及使用注意事项,并附带示例代码。

前言:AsyncTaskandroid提供的轻量级异步任务类(代码轻量级,系统资源占用并不是轻量级!),完整的封装了异步任务流程,这让我想起了Handler异步任务通信机制。两者对比起来,AsyncTask较好的封装性可以极大的减少代码量,而Handler+Thread的异步实现代码量是比较多的,但是Handler+Thread的异步实现方式对于线程的把控更精细化,代码效率会更优化一些(实际上AsyncTask对象就是基于Handler+Thread异步的封装)。在实现一些简单异步任务的时候是可以优先考虑AsyncTask,毕竟更简洁一些!

一、AsyncTask对象说明

1、实现的逻辑:

代码中直接继承AsyncTask,内部方法doInBackground(Params)实现异步操作,并提供接口publicProgress(Progress)反馈当前异步执行的程度(可以通过该接口实现UI进度更新),内部方法onProgressUpdate(Progress)处理反馈的进度信息,内部方法onPostExecute(Result)处理最终异步结果。

 

2、定义了三个泛型类型:ParamsProgressResult

Params 启动任务执行的输入参数。

Progress 后台任务执行过程中的反馈。

Result 后台执行任务最终返回的结果。

注:注意泛型和可变参数的使用。

 

3、定义的6个内部方法

  doInBackground(Params…) :后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。

  onPostExecute(Result) : 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。此方法在主线程执行,任务执行的结果作为此方法的参数返回

  onProgressUpdate(Progress…) :  可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。

  onPreExecute() :  这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。

  onCancelled()   :  用户调用取消时,要执行的操作

注:doInBackground(Params…)方法必须重载,其它方法根据实际需要使用。

 

4、几个注意要点

aAsyncTask的实例必须在UI thread中创建;

b、启动实例的execute方法必须在UI thread中调用;

c不要手动的调用onPreExecute(), onPostExecute(Result)doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;

d、一个AsyncTask实例只能被执行一次,多次调用时将会出现异常



            AsyncTask运行示意图                


二、AsyncTask异步实现代码示例

private class MyTask extends AsyncTask<Params, Progress, Result> {

   //异步操作

    protected Result doInBackground(Params... params) {
        .....

      //反馈进度
        publishProgress(Progress);
        .....
      return Reslut;
   }

    //处理操作进度反馈

   protected void onProgressUpdate(Progress... progress) {

        ....

    }

    //处理返回结果

   protected void onPostExecute(Result result) {
      ....
   }

}

 

启动异步任务:

new MyTask().execute(Params);

 

三、更多

本文前言已经提到了,AsyncTask异步实际上是对Handler+Thread的封装,那么具体是怎么封装实现的呢?可以参考:http://blog.csdn.net/liuhe688/article/details/6532519


如果你对安卓异步线程和消息机制不太了解,欢迎阅读我的上一篇笔记——安卓异步线程消息机制学习!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值