Когда нам нужно переопределить метод 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.

Intereting Posts
Что эквивалентно статическим конечным полям Java в Котлине? Kotlin, как тестировать (int) массив Kotlin: Как изменить значение в паре? Как сделать вызов удаленного удаленного вызова (RPC) в Котлине? ExpandableListView не отображается в моей деятельности Создайте общий наблюдаемый, который избегает множественного вызова Как создать вызванное время Уведомление, которое работает на всех устройствах Android Работает ли KAnnotator в Android Studio? Klaxon: Ожидалось имя, но получил LEFT_BRACE Аннотатор Android Studio StyleRes дает предупреждение о Kotlin var Пользовательский вид не отображается в Android Как выполнить действие для всех комбинаций элементов в списках? В чем разница между shouldBe и shouldBe именно в KotlinTest? В Котлине, почему Джексон в некоторых случаях отказывается от несанкционированного не аннотированного объекта, а не в других Когда именно ключевое слово оператора требуется в Котлине?