您的位置:首页 > 其它

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

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

一、AsyncTask对象说明

1、实现的逻辑:

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

2、定义了三个泛型类型:Params,Progress和Result

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

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

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

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

3、定义的6个内部方法

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

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

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

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

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

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

4、几个注意要点

a、AsyncTask的实例必须在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

如果你对安卓异步线程和消息机制不太了解,欢迎阅读我的上一篇笔记——安卓异步线程消息机制学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: