close

在 Android 開發中,Handler 是用於安排未來某個時間點執行訊息或可執行程式碼的機制。

它也用於在不同的執行緒之間傳遞和處理訊息,Handler 通常與 LooperMessageQueue 一起使用,來在一個執行緒內部管理訊息的排隊和處理。

 

主要功能

  • 處理訊息和執行任務:

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()
    }
}

 

最後~

若有任何錯誤或建議,歡迎大家提出~

arrow
arrow
    文章標籤
    Android Android APP Handler
    全站熱搜
    創作者介紹
    創作者 Jerry 的頭像
    Jerry

    Android工程師生存筆記

    Jerry 發表在 痞客邦 留言(0) 人氣()