handler的概念:
顧名思義,handler在英語中是「操作著,處理者的意思」,而官方的文件給出的概念是,handler允許你傳送或者處理message物件或者runable物件,這兩個物件都是與執行緒的message queue相關聯的。每乙個handler的例項(乙個執行緒中可以有多個)都與單個的執行緒和那個執行緒對應的messagequeue 關聯,而處理的先後則按照傳送訊息的先後,先進先出進行處理。
根據自己的理解,handler主要負責message的傳送與訊息的處理。
如下面例子 handler handler=new handler();//負責允許runable物件
handler handler1 = new handler()//負責接受message物件};runnable r=new runnable()});
m.sendtotarget();
} };
thread t=new我們來先看看結果:thread (r); //執行上面的runable
t.start();
從上面結果來看,可以得出一點結論,那就是不管是message還是runable物件,雖然是在別的執行緒通過handler傳送訊息,但是handler接到訊息後,處理過程還是在handler所在的那個執行緒中(也就是本例中的主線程中)
在網上有些文章說,message和runable是又兩個佇列來管理的,其實不是,我們不妨將
m.sendtotarget();移到handler.post的前面
runnable r=new發現結果:runnable()});
} };
hanler1先執行了,說明,他們共用的乙個佇列。
實際上looper通過從message queue從取出乙個message,然後由優先順序的從高到底判斷
message的型別,有三種型別( 1) message裡面的callback,乙個實現了runnable介面的物件,其中run函式做處理工作;
2) handler裡面的mcallback指向的乙個實現了callback介面的物件,由其handlemessage進行處理;
3) 處理訊息handler物件對應的類繼承並實現了其中handlemessage函式,通過這個實現的handlemessage函式處理訊息。)
looper的概念
根據官方文件的概念(class used to run a message loop for a thread.)用來為執行緒處理訊息迴圈
而執行緒中預設是沒有looper的。為了給乙個執行緒建立looper,執行looper.prepar() 和looper.loop()
實現如下
class looperthread extendslooper在執行loop()裡面處理訊息thread
};looper.loop();}}
有人說為啥主線程裡面沒有looper.prepare() 和looper.loop()呢,其實系統已經為主執行緒預設新增了這兩個方法,所以在主線程中,我們可以直接初始化handler。
下面再總結下:
每乙個執行緒都可以包含乙個looper和乙個訊息佇列
在android中ui執行緒(也即主線程)預設有乙個looper和訊息佇列
並且每乙個handler都有乙個對應得message queue,而且乙個執行緒中只有乙個message queue,通過handler向message queue 傳送訊息,有兩種方式傳送sendmessage,和post
兩者都可以更新ui執行緒。
經過測試,handler在哪個執行緒裡面,不管是傳送給他的message還是runale都在相對應的那個handler執行緒裡面執行(一般是 主線程)
這篇文章上面說的有問題
交叉線和直通線
2010 1 24 21 25 49 問 copper cross over與copper straight through兩種電纜有什麼區別?這兩種銅質電纜,我就是搞不懂有什麼不同!還有serial dte和serial dce兩種線的區別又是什麼呢?這兩種線與題目上的兩種線的接頭是不是一樣的呢?...
交叉線和直通線的區別和用途
一般裝置分為dce 資料通訊裝置 和dte 資料終端裝置 當dce 和dce 以及dte和dte 之間相連,也就是同種型別的裝置相連時間,我們用交叉線。當dce和dte 之間相連線,也就是不同種型別的裝置相連時間,我們一般使用直通線 即不同型別的裝置需要更簡單的連線,不宜是傳輸複雜化 常見的dce ...
微帶線和帶狀線
帶狀線 走在內層 stripline double stripline 埋在pcb內部的帶狀走線,如下圖所示 藍色部分是導體,綠色部分是pcb的絕緣電介質,stripline是嵌在兩層導體之間的帶狀導線。因為stripline是嵌在兩層導體之間,所以它的電場分布都在兩個包它的導體 平面 之間,不會輻...