Android线程通信模型-AsyncTask类
1.异步任务类:是对Android中线程通信模型的封装。
2.三个泛型
Params:异步任务输入参数类型。execute和doInBackground方法的参数类型。
Progress:进度提示类型。publishProgress和onProgressUpdate方法的参数类型。
Result:是异步任务执行的结果类型。
3.主要方法
AsyncTask<Params,Progress,Result> execute(Params... params)
void publishProgress(Progress... values)
void onPreExecute()
void onPostExecute(Result result)
void onProgressUpdate(Progress... values)
4.抽象方法
Result doInBackgroud(Params... params)
5.特点
1)每个异步任务对象只能执行一次
2)同时创建的异步任务对象最好不要超过10个,否则会降低程序执行的性能。
简化代码,演示其主要原理如下:
public abstract class MyAsyncTask<Params, Progress, Result> {
private Handler handler;
public MyAsyncTask() {
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:// 进度提示消息
updateProgress((Progress[]) msg.obj);
break;
case 1:// 异步任务完成的消息
onPostExecute((Result) msg.obj);
break;
}
}
};
}
// 执行异步任务
public void execute(final Params... params) {
onPreExecute();
new Thread() {
public void run() {
Result result = doInBackground(params);
Message msg = Message.obtain();
msg.what = 1;
msg.obj = result;
handler.sendMessage(msg);
};
}.start();
}
//发布进度提示消息
public void publishProgress(Progress... values) {
Message msg = Message.obtain();
msg.what = 0;
msg.obj = values;
handler.sendMessage(msg);
}
//进度更新方法
public void updateProgress(Progress... values){};
// 在开始异步任务前 执行准备工作
public void onPreExecute(){};
// 在工作线程中调用的 异步任务处理方法
public abstract Result doInBackground(Params... params);
//当异步任务执行结束后 进行界面更新的方法
public void onPostExecute(Result result){};
}