当我们需要重写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委托。