详解详解Android 中中AsyncTask 的使用的使用
详解详解Android 中中AsyncTask 的使用的使用
1、首先我们来看看、首先我们来看看AsyncTask 的介绍的介绍:
Handler 和 AsyncTask 都是android 中用来实现异步任务处理的方式;其中:
Handler 实例向 UI 线程发送消息,完成界面更新,
优点:对整个过程控制的比较精细;
缺点:代码相对臃肿,多个任务同时执行时,不易对线程进行精确的控制;
AsyncTask :比Handler 更轻量级一些,适用于简单的异步处理;
优点:简单 | 快捷 | 过程可控;
缺点:使用多个异步操作时就变得复杂起来;
2、、AsyncTask 的定义:的定义:(AsyncTask 定义了三种泛型类型定义了三种泛型类型)
public abstract class AsyncTask<Params,Progress,Result>{...}
说明:
Params :启动任务执行的输入参数,例如:HTTP 请求的URL;
Progress: 后台任务执行的百分比;
Result:后台执行任务最终返回的结果,比如String;
3、、AsyncTask 异步任务的执行步骤:异步任务的执行步骤:(以下方法除以下方法除execute(Params… params),在,在AsyncTask中重写中重写),下列是相关方法的,下列是相关方法的
介绍:介绍:
A、execute(Params… params) :
执行一个异步任务,需要我们在UI线程中调用,触发任务
B、OnPreExecute():
execute(Params… params)调用后立即执行,一般用于在执行后台任务前对UI做一些标记; 例如,可以在此处显示进度对
话框;
C、doInBackground(Params.. params):
onPreExecute() 完成后执行,后台执行,处理比较耗时的操作;此处不能操作UI,执行的过程中调用
publishProgress(Progress… values)来更新进度信息;
D、onProgressUpdate(Progress… values):
在调用publicshProgress(Progress… values)方法执行,直接将进度信息更新到UI组建上;此方法在主线程上执行,用于
显示任务执行的进度;
E、onPostExecute(Result result):
此方法在主线程中执行,当后台的操作结束时,此方法会被调用,计算结果作为参数传递到此方法中,直接将结果显示
到UI组建上。
F、cancel(); :
取消一个正在执行的任务,在UI线程中完成,用AsyncTask的对象进行调用,参数为true/false;
4、使用、使用AsyncTask 时注意事项:时注意事项:
A、异步任务实例必须在UI线程中创建;
B、execute(Params… params) 方法必须在UI线程中调用;
C、不要手动的调onPreExecute().doInBackground().onProgressUpdate().onPostExecute()这几个方法;
D、不能在doInBackground(Params… params) 中更改组件信息;
E、一个任务实例只能执行一次,如果执行第二次会抛出异常;
5、案例:使用、案例:使用AsyncTask 实现图片的下载:实现图片的下载:
Activity类,主程序的入口: