Handler原理核心點筆記

2021-08-10 17:49:46 字數 686 閱讀 6072

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 訊息,即執行緒間傳遞的物件,傳遞的資訊包含在其中。例如後台執行緒在處理資料...