Handler机制
每个android应用在启动时都会开启一个线程,该线程称为UI线程。正常情况下,所有操作都运行在该线程中。但为了UI更新的流畅,通常将耗时操作放置于其它线程中运行。但android要求所有涉及到UI的操作必须在UI线程中执行。于是在其它线程耗时操作完成时如果需要更新UI,就需要使用线程异步通信,即本文提到的Handler机制。
基本使用
final Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e("ZXX", msg.arg1 + "");
Log.e("ZXX", msg.arg2 + "");
Log.e("ZXX", (String)msg.obj);
//利用message中的值 更新UI
}
};
new Thread(new Runnable() {
@Override
public void run() {
//耗时操作
Message message = myHandler.obtainMessage();
message.arg1 = 1;
message.arg2 = 2;
message.obj = "abc";
myHandler.sendMessage(message);
}
}).start();
handler的基本操作很简单,但其机制还是需要了解一下的。
先是基本概念,一个线程会关联一个消息队列,消息队列要有一个Looper对象来不断的循环取消息,并分给对应的Handler处理。Handler除了负责处理消息外还负责发送消息,并且在发送时将自身设置进Message 消息的target中,当Looper取出消息时便可以根据这个target将消息分发给对应的handler处理。