Handler原理笔记


android的Handler是线程之间通信的唯一方式,这种方式初看我觉得就是一个回调接口的形式。很多时候,我们只要将handller的变量插入其他线程就能进行交互了。当然,Handler的实现过程,其实还是很复杂的。我自己总结了下:

Handler是依托于数据结构的。也就是,如果想进行线程间的通信,需要在被通信的线程的中维持一个Looper轮询机构。在Looper中插入一个Message Queue数据集。而后,线程中的Looper就会处于无限循环的状态。每次,在子线程中调用接口handler的sendEmptyMessage(Message msg)方法发送一个Message插入消息队列;或者通过post(Runnable r)方法将一个Runnable对象插入消息队列中——一般来说,这个Runnable对象对应的是Handler宿主ThreadLocal所有执行的动作,如果宿主是UiThread,那么Runnalble中就可以进行有关Ui的操作。这也是post和handleMessage(Message msg)的区别所在。


/** 
 * Handle system messages here. 
 */  
public void dispatchMessage(Message msg) {  
    if (msg.callback != null) {  
        handleCallback(msg);  
    } else {  
        if (mCallback != null) {  
            if (mCallback.handleMessage){
<span style="white-space:pre">		</span>return;
        }  
        handleMessage(msg);  
    }  
}  


以上这个代码,起先看起来有些糊涂,在查看了源码后,发现,post的调用其实还是Message的调用,把Runnable对象当作一个数据传递过去,再通过handleCaaBack(Message msg)进行处理。而如果没有Runnable的对象,就会执行在宿主中复写的接口handleMessage(Message msg)方法


而Handler的原理其实就是下图:



以上理解来自:http://blog.csdn.net/bboyfeiyu/article/details/38555547#comments

这个连接有非常详细的源码解释,我仅是做好自己的笔记,毕竟知识易丢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值