Я узнал о 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.