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

這個連接有非常詳細的源碼解釋,我僅是做好自己的筆記,畢竟知識易丟


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