由于主线程main不可受阻塞的特点,有些时候我们往往需要在后台做行耗时的操作(比如下载),同时还需要去更新主线程上的ui,使用异步任务,可以很方便的进行后台处理操作。使用异步任务处理类,做到不用线程也能达到的效果。
AsyncTask 类
java.lang.Object
android.os.AsyncTask<Params, Progress, Result>
private class AsyncBarTask extends AsyncTask<Void, Integer, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
泛型类
Params 输入参数的类型 URL(网址)
Progress 更新值的类型 Integer(下载进度值)
Result 操作完成值的类型 Long(下载文件多大)
作用:不用线程和handler就可实现前台和后台的操作,并实现他们之间的通信.
步骤
1.定义AsynTask子类
2.重写方法 4个方法
onPreExecute(): 前台处理,在调用doInBackground() 之前
doInBackground() :后台处理 (异步处理) onPreExecute()之后处理
在做后台处理时可调用publishProgress(Progress…) 告诉前台更新的值
onProgressUpdate() :前台处理,在调用publishProgress(Progress…)之后
onPostExecute() :前台处理 在doInBackground() 执行完成后
3.用该子类构造对象并调用execute()方法
示例一:
1.xml布局,定义一个布局用于效果显示