前言: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
如果你对安卓异步线程和消息机制不太了解,欢迎阅读我的上一篇笔记——安卓异步线程消息机制学习!
本文详细介绍了Android中的AsyncTask类,包括其工作原理、泛型定义、关键方法的作用及使用注意事项,并附带示例代码。
2951

被折叠的 条评论
为什么被折叠?



