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){};
}
- Android线程通信模型-AsyncTask类
- android线程通信之Asynctask
- Android线程模型和AsyncTask
- Android线程模型和AsyncTask
- Android 线程模型和 AsyncTask
- Android -- 线程通信之AsyncTask、Handler
- 关于Android线程模型与AsyncTask
- android 的线程模型和AsyncTask
- android线程 Handler Message Queue AsyncTask线程模型 线程交互
- 线程通信之AsyncTask
- AsyncTask线程异步通信
- Android UI 单线程模型和AsyncTask原理
- android 异步线程AsyncTask类的使用
- android 线程之AsyncTask
- android线程、UI、AsyncTask
- Android AsyncTask异步线程
- Android AsyncTask异步线程
- Android线程----AsyncTask详解
- stm32时钟分析
- 自定义标签改变标签体的内容
- EL表达式
- global_name 和dblink的关系
- 71
- Android线程通信模型-AsyncTask类
- ANDROID开源项目经典例子
- 写给新手,从不懂到入门,一只老鸟的嵌入式入门心得
- hdu 1811 Rank of Tetris
- 关于复选框全选,当其中的一个复选框去掉勾时,全选的复选框的勾也去了,当除了全选框的其他复选框都被选中时,全选框也被选中。
- linux LCD驱动(一)--硬件分析
- 想爱,爱不了,想恨,恨不下,想忘,忘不了
- ubuntu 有时使用man xxx查询函数时查不到的解决方法
- Linux 下使用 NMON 分析系统性能(其他如dstat、iostat)