Android线程通信模型-AsyncTask类

来源:互联网 发布:3d家具软件 编辑:程序博客网 时间:2024/06/03 23:15
  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){};

}