最近没事干又看了看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(参考)
本文详细阐述了Android中的Handler机制及其实现原理,包括Message、MessageQueue、Looper等核心组件如何协作完成多线程间的通信。通过实例代码分析,揭示Handler在Android开发中的高级应用,帮助开发者摆脱基础阶段限制,深入理解Android系统底层。
802

被折叠的 条评论
为什么被折叠?



