Когда нам нужно переопределить метод handleMessage () метода Handler

Я узнал о Looper и Handler, и в большинстве случаев я читал об этом, что он использует для общения с потоком пользовательского интерфейса. Но потом я увидел код, который был дочерним классом Handler с методом handleMessage(msg : Message) тогда я запутался, потому что мы можем взаимодействовать с потоком GUI без расширения класса Handler. В качестве примера в kotlin android.

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

Поэтому я могу легко взаимодействовать с потоком GUI без реализации дочернего класса или handleMessage() .

Позвольте мне объяснить немного больше о моем quesiton. Иногда я вижу этот пример.

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

Таким образом, в приведенном выше примере оба кода используются для обновления / взаимодействия с потоком графического интерфейса. но первый код более простой и легкий для взаимодействия с графическим интерфейсом.

Тогда какова реальная цель метода handleMessage() и когда мы должны ее реализовать?

Вызов sendMessage (…) используется, когда вы хотите, чтобы message.obj был каким-то специальным классом, чтобы отправить его потенциально другому потоку для обработки. Обычно это делается с помощью message.What является идентификатором, и зная тип объекта для сообщения данного id.obj определенного идентификатора, затем перебрасывая этот тип объекта. Это используется во многих местах всей платформы Android, например, проверьте BluetoothStateMachine и как они обрабатывают processMessage(Message msg) в каждом из классов состояний. Каждое из этих состояний делегировано Handler.