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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章