Handle 訊息機制

2022-09-08 02:51:13 字數 1204 閱讀 4581

1.在新啟動的執行緒中傳送給訊息

2.在主線程獲取、處理訊息

因為在android系統中ui操作並不是執行緒安全的,如果多個執行緒併發的去操作同乙個元件,可能導致執行緒安全問題。為了解決這乙個問題,android 制定了一條規則:只允許ui執行緒來修改ui元件的屬性等,也就是說必須單執行緒模型,這樣導致如果在ui介面進行乙個耗時叫長的資料更新等就會形成程式假死 現象 也就是anr異常,如果20秒中沒有完成程式就會強制關閉。所以比如另乙個執行緒要修改ui元件的時候,就需要借助handler訊息機制了。

1. void  handlemessage(message  msg):處理訊息的方法,該方法通常被重寫。

2.final boolean hasmessage(int  what):檢查訊息佇列中是否包含有what屬性為指定值的訊息

3.final boolean hasmessage(int what ,object object) :檢查訊息佇列中是否包含有what好object屬性指定值的訊息

4.sendemptymessage(int what):傳送空訊息

5.final boolean send emptymessagedelayed(int what ,long delaymillis):指定多少毫秒傳送空訊息

6.final  boolean sendmessage(message msg):立即傳送訊息

7.final boolean sendmessagedelayed(message msg,long delaymillis):多少秒之後傳送訊息

1.handler:它把訊息傳送給looper管理的messagequeue,並負責處理looper分給它的訊息

2.messagequeue:採用先進的方式來管理message

3.looper:每個執行緒只有乙個looper,比如ui執行緒中,系統會預設的初始化乙個looper物件,它負責管理messagequeue,不斷的從messagequeue中取訊息,並將

相對應的訊息分給handler處理

1.呼叫looper的prepare()方法為當前執行緒建立looper物件,建立looper物件時,它的構造器會自動的建立相對應的messagequeue

2.建立handler子類的例項,重寫handlemessage()方法,該方法處理除ui執行緒以外執行緒的訊息

3.呼叫looper的loop()方法來啟動looper

來自更多詳細**可進檢視

更詳細在

Handle機制與原理(面試最簡潔回答)

handler 有兩個構造引數,乙個是looper,乙個是callback,如果在主線程例項化的時候,不需要填入looper,預設就是主線程。如果在子執行緒例項化的時候需要傳入looper.getmylooper 但是例項化之前需要looper.prepare 這個是為了將threadlocal跟執...

handle 控制代碼

控制代碼是乙個32位的整數,實際上是windows在記憶體中維護的乙個物件記憶體實體地址列表的整數索引。因為windows的記憶體管理經常會將空閒物件的記憶體釋放掉,當需要訪問時再重新提交到物理記憶體,所以物件的實體地址是變化的,不允許程式直接通過實體地址來訪問物件。程式將想訪問的物件的控制代碼傳遞...

控制代碼 Handle

最近在學習儲存方面的知識,第一次接觸控制代碼這樣的專業詞彙,為了更好的理解其中含義,決定開始寫部落格,慢慢成長 什麼是控制代碼?在作業系統中存在著許多的核心物件,這些物件具有許多的屬性,其中位址是比較重要的一種。作業系統在操作這些物件時,如果傳遞的是位址本身,將會帶來一系列的隱患,比如呼叫位址資訊複...