最近没事干又看了看Handler的机制,做一个大概的阐述。
对于初学者来说会用才是他们的当务之急,但是你要拜托菜鸟的帽子就必须深挖底层的东西。
先看看我们一般是咋用的:
private Thread mThread;
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
// do your thing;
break;
default:
break;
}
};
};
public void startTask(){
new Thread(){
@Override
public void run() {
Message msg = mHandler.obtainMessage();
msg.what = 1;
msg.arg1 = 2;
mHandler.sendMessage(msg);
}http://blog.youkuaiyun.com/jackchen95/article/details/13631761
}.start();
}
这这几行的代码,有很牛逼的机制。
看看源码才知道是这样的:
首先从表面上理解这样几个概念:Message(消息) MessageQueue(消息队列) Looper(循环) Handler
他们是怎样协调工作的呢。
大概是这样的,在主线程中有且只有一个Looper循环,Looper中维护着一个MessageQueue(消息队列),Handler从消息池中得到一个Message对象,Handler将消息发送出去之后MessageQueue就会接收到这个Message对象,Looper发现自己的消息队列中有消息的话就会执行:
看最后一行,这是一个死循环,msg.targert是Handler的实例,并且这个Handler就是mHandler,也就是mHandler.obtainMessage();
这个Handler,你使用mHandler.obtainMessage()得到的消息,消息在被处理的时候还是mHandler,应为Message中有一个成员变量
Handler target。
大致就是这样:
http://blog.youkuaiyun.com/jackchen95/article/details/13631761
http://blog.youkuaiyun.com/jackchen95/article/details/13631761(参考)