close
在 Android 開發中,Handler 是用於安排未來某個時間點執行訊息或可執行程式碼的機制。
它也用於在不同的執行緒之間傳遞和處理訊息,Handler 通常與 Looper 和 MessageQueue 一起使用,來在一個執行緒內部管理訊息的排隊和處理。
主要功能
- 處理訊息和執行任務:
Handler 可以將 Message 或 Runnable 發送到其所關聯的 MessageQueue 中,並按順序進行處理。
- 執行緒間的通訊:
在Android中,更新UI元件 只能在 主執行緒(UI執行緒) 進行。若背景執行緒需要更新UI,可以透過 Handler 將操作發送到主執行緒執行。
- 延遲執行任務:
Handler 可以設定在未來某個特定時間或延遲一段時間後執行任務。
基本工作流程
Handler基本工作流程是透過 "sendMessage" 或 "post" 的方式將訊息放入 "MessageQueue" 中,並且以 "佇列先進先出" 的方式,透過 "Loop" 將訊息取出給 "Handler處理"。
下面透過一個簡單的範例來演示執行緒之間的溝通,
假設有兩個背景執行緒A與B,我們需要從執行緒A向執行緒B發送數據或指令,
首先,我們創建一個名為ThreadA的執行緒,專門用於發送訊息
class ThreadA(val handlerB: Handler) : Thread() {
override fun run() {
val messageA = Message.obtain()
messageA.obj = "從Thread A發送的訊息"
handlerB.sendMessage(messageA)
}
}
接著,在MainActivity中,我們新增一個名為ThreadB的執行緒來接收訊息
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val threadB = Thread {
Looper.prepare()
val handlerB = object : Handler(Looper.myLooper()!!) {
override fun handleMessage(msg: Message) {
println("Thread B接收訊息: ${msg.obj}")
}
}
ThreadA(handlerB).start()
Looper.loop()
}
threadB.start()
}
}
最後~
若有任何錯誤或建議,歡迎大家提出~
文章標籤
全站熱搜