1.在looper中prepare()用於
建立乙個threadlocal物件,並存放乙個looper例項,並且prepare()方法只能代用一次,多次呼叫會出異常,所以乙個執行緒只有乙個looper物件,建立乙個messagequeque物件,用 於存放message。
2.looper.
loop()為乙個無限迴圈,不斷的從messagequeque中獲取訊息,並且呼叫msg.target.dispatchmessage() 方法進行訊息分發,dispatchmessage()會呼叫handlermessage(message message)介面進行更新ui。
3.handler在初始化的時候會呼叫threadlocal.get()獲取looper例項,所以prepare()方法必須在handler初始化之前呼叫。
4.handler.sendmessage(message msg)會給傳入的msg內容加上當前handler的引用,就是msg.target=this,然後再將message放入messagequeque。在步驟2中的msg.target就是在此時傳入的。
5.activity在使用handler的時候不用呼叫prepare(),loop()是因為在activitythread中已經呼叫,所以如果要在子執行緒中新建乙個handler就必須先呼叫prepare(),loop();
總結:執行緒間通訊就是乙個阻塞佇列
handler機制的原理
andriod提供了handler 和 looper 來滿足執行緒間的通訊。handler先進先出原則。looper類用來管理特定執行緒內物件之間的訊息交換 messageexchange 1 looper 乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的messagequeue 訊息...
Handler相關筆記
一.handler的例項化 如果你不帶引數的例項化 handler handler new handler 那麼這個會預設用當前執行緒的looper 一般而言,如果你的handler是要來重新整理操作ui的,那麼就需要在主線程下跑。情況 1.要重新整理ui,handler要用到主線程的looper。...
Handler相關筆記
1,說說handler機制原理 handler的出現就是為了保證ui執行緒安全,對ui的修改只有ui執行緒可以操作,不允許其他執行緒操作,下面對handler非同步訊息處理機制再做一下簡單的介紹 1 成員介紹 message 訊息,即執行緒間傳遞的物件,傳遞的資訊包含在其中。例如後台執行緒在處理資料...