android异步消息处理之Handler
1.利用Handler更新主线程UI
简单用法如下:
public static final int UPDATE_TEXT = 1;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
mTvSpan.setText("hello!");
break;
default:
break;
}
}
};
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_drawerLayout:
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message);
}
});
break;
default:break;
}
}
2.原理简单说明:
Message:线程之间传递的消息,内部可以携带少量的数据,用于在不同线程之间传递信息;Message中有四个字段是需要注意的,
what:上面示例中使用的;
arg1和arg2:携带一些整型数据;
obj:携带一个Object对象。
Handler:名为处理者,主要用于发送和处理消息,发送消息一般是使用Handler的sendMessage()方法,而发出去的消息最终会传递到Handler的handleMessage()方法中.
MessageQueue:消息队列,主要用来存放所有从Handler中发送过来的消息,这些消息都是等待被处理的,每个线程中只有一个MessageQueue.
Looper:Looper是每个线程中MessageQueue的管家,调用Looper的Loop方法后就会进入到一个无线循环中,然后每当发现MessageQueue中有消息时,都会取出来,并传递到Handler的handleMessage()方法中。
3.Handler机制原理图: