当我们需要重写Handler的handleMessage()方法时

时间:2017-11-16 18:03:36

标签: android kotlin

我正在学习有关Looper和Handler的知识,而且大多数时候我都会读到它用来与UI线程进行通信。但后来我看到代码是Handler的子类handleMessage(msg : Message)方法然后我感到困惑,因为我们可以与GUI线程交互而不扩展Handler类。 例如在kotlin android。

val handler = Handler();
handler.post({ 
// update GUI here
});

因此,我可以轻松地与GUI线程交互,而无需实现子类或handleMessage()

让我解释一下我的问题。有时我看到这个例子。

class HandlerSub : Handler(){

    override fun handleMessage(msg : Message){
        // update GUI here.
    }
}
val handler = HandlerSub();
handler.send({ 
// send something..
});

因此在上面的示例中,两个代码都用于更新/与GUI线程交互。但第一个代码更简单,更少的代码与GUI交互。

那么handleMessage()方法的真正目的是什么以及何时实施呢?

1 个答案:

答案 0 :(得分:1)

当您希望message.obj成为某个自定义类时,将使用sendMessage(...)调用,以将其发送到可能的另一个线程进行处理。这通常通过使message.what是一个ID,并知道该特定id的message.obj的对象类型,然后转换为该对象类型来完成。这在整个Android框架的许多地方都有用,例如检查BluetoothStateMachine以及它们如何在每个状态类中处理processMessage(Message msg)。这些状态中的每一个都由Handler委派。