当我们需要重写Handler的handleMessage()方法
我正在学习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()
方法的真正目的是什么,什么时候应该实现呢?
sendMessage(…)调用是在你想让message.obj成为一些自定义类的时候使用的,把它发送给潜在的另一个线程进行处理。 这通常是通过让message.what是一个ID,并知道该特定id的message.obj的对象types,然后转换为该对象types来完成的。 这在整个Android框架的许多地方使用,例如检查BluetoothStateMachine以及它们如何处理每个状态类中的processMessage(Message msg)
。 这些州中的每一个都由Handler委托。