handler理解再學習之二

2021-10-08 23:43:28 字數 809 閱讀 4746

handler物件與其呼叫者在同一執行緒中,如果在handler中設定了延時操作,則呼叫執行緒也會堵塞。每個handler物件都會繫結乙個looper物件,

每個looper物件對應乙個訊息佇列(messagequeue)。如果在建立handler時不指定與其繫結的looper物件,系統缺省會將當前執行緒的looper繫結到該handler上。

在主線程中,可以直接使用new handler()建立handler物件,其將自動與主線程的looper物件繫結;

在非主線程中直接這樣建立handler則會報錯,因為android系統預設情況下非主線程中沒有開啟looper,而handler物件必須繫結looper物件。

這種情況下,需先在該執行緒中手動開啟looper(looper.prepare()-->looper.loop()),然後將其繫結到handler物件上;

或者通過looper.getmainlooper(),獲得主線程的looper,將其繫結到此handler物件上。

handler傳送的訊息都會加入到looper的messagequeue中。

一說handler包含兩個佇列:執行緒佇列和訊息佇列;使用handler.post()可以將執行緒物件加入到執行緒佇列中;使用handler.sendmessage()可以將訊息物件加入到訊息佇列中。

通過原始碼分析證實,handler只有乙個訊息佇列,即messagequeue。通過post()傳進去的執行緒物件將會被封裝成訊息物件後傳入messagequeue。

使用post()將執行緒物件放到訊息佇列中後,當looper輪詢到該執行緒執行時,實際上並不會單獨開啟乙個新執行緒,而仍然在當前looper繫結的執行緒中執行,

spring再學習(二) spring事務

與關係型資料庫一致,事務都遵循 acid 原則 spring支援程式設計式事務管理以及宣告式事務管理兩種方式。在spring框架,用註解開啟事務 transactional,當然事務有其特性 spring事務的傳播行為有7種 spring在事務中使用isolation來配置它 isolation r...

ucos 學習之二

os initmisc void os ext volatile int32u ostime 使用volatile的關鍵字,是為了 volatile的作用 作為指令 關鍵字,確保本條指令不會因 編譯器的優化而省略,且要求每次直接讀值.簡單地說就是防止 編譯器對 進行優化.比如如下程式 xbyte 2...

PHP學習之二

mysql 資料庫函式庫 本函式庫共有 32 個函式 先看一下下面幾個 mysql close 關閉 mysql 伺服器連線。mysql connect 開啟 mysql 伺服器連線。mysql error 返回錯誤資訊。mysql query 送出乙個 query 字串。mysql select ...