我正在学习有关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()
方法的真正目的是什么以及何时实施呢?
答案 0 :(得分:1)
当您希望message.obj成为某个自定义类时,将使用sendMessage(...)调用,以将其发送到可能的另一个线程进行处理。这通常通过使message.what是一个ID,并知道该特定id的message.obj的对象类型,然后转换为该对象类型来完成。这在整个Android框架的许多地方都有用,例如检查BluetoothStateMachine以及它们如何在每个状态类中处理processMessage(Message msg)
。这些状态中的每一个都由Handler委派。