(written in 2012-06-29 01:22:46)
Message
用于存放消息,通常与Handler类配合使用。
常用属性
arg1 | int |
arg2 | int |
what | int |
obj | Object |
例:
Message msg = new Message();
msg.what = 1;
msg.arg1 = 100;
msg.obj = "hello";
msg.obj = new Runnable();
消息机制原理
Handler
常用API
sendEmptyMessage(int what) | 从工作线程向主线程发送一个空消息 |
sendEmptyMessage(int what,long uptime) | uptime为指定时间 |
sendEmptyMessageDelayed(int what,long delay) | 延时发送空消息 |
sendMessage(Message msg) | 向主线程发送消息 |
sendMessageAtTime(Message msg,long delay) | 按指定时间向主线程发送消息 |
sendMessageDelayed(Message msg,long delay) | 延迟指定时间向主线程发送消息 |
handleMessage(Message msg) | 接收并处理从工作线程发送来的消息 |
例:从两个工作线程向主线程发送不同的消息,主线程接受消息并显示不同的处理处理信息。
MainAct.java
public void onClick(View v){
switch(v.getId()){
case R.id.btnDownload:
new Thread(){
public void run(){
CommonUtils.timeConsuming(10);
Message msg = new Message();
msg.what = CommonUtils.FLAG_DOWNLOAD;
msg.obj = "donwload finished";
mHandleer.sendMessage(msg);
};
}.start();
break;
case R.id.btnUpdate:
new Thread(){
public void run(){
CommonUtils.timeConsuming(8);
Message msg = new Message();
msg.what = CommonUtils.FLAG_UPDATE;
msg.obj = "update finished";
mHandler.sendMessage(msg);
};
}.start();
break;
}
}
在activity的onCtreate()中创建Handler对象mHandler
Button btnDownload.setOnClickListener(this);
Button btnUpdate.setOnClickListener(this);
mHandler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case CommonUtils.FLAG_DOWNLOAD:
mTextView.setText("下载结束");
break;
case CommonUtils.FLAG_UPDATE:
mTextView.setText("更新结束");
}
}
};
CommonUtils.java
public static final int FLAG_DOWNLOAD=1;
public static final int FLAG_UPDATE=2;