Мое понимание:
A Обработчик - это всего лишь механизм доставки информации между двумя потоками.Это не единственный механизм, но это механизм, который Google выбрал для добавления простых методов в Activity для выполнения общих задач.
Из документа
Когда процессСозданный для вашего приложения, его основной поток предназначен для запуска очереди сообщений, которая заботится об управлении объектами приложений верхнего уровня (действиями, широковещательными приемниками и т. д.) и любыми окнами, которые они создают.Вы можете создавать свои собственные потоки и общаться с основным потоком приложения через обработчик.Это делается путем вызова тех же методов post или sendMessage, что и раньше, но из новой темы.Затем данный Runnable или Message будет запланирован в очереди сообщений обработчика и обработан при необходимости.
Основной поток выполняет обработчик.Обработчик отвечает за выполнение ваших действий и управление средой приложения.Обработчик - это просто цикл сообщений, который отправляет вещи из MessageQueue.Вот почему ваш поток должен запускать Looper , чтобы создать обработчик.Чтобы синхронизировать другие вещи, которые вы хотите сделать с этим усилием, вы должны вставить свои запросы в эту очередь сообщений, чтобы основной поток приложения выполнял вашу работу.Интерфейс пользователя написан так, что пока только один поток получает доступ к объектам, он функционирует.
Полагаю, смысл этого заключался в том, чтобы указать, что обработчик является одним из механизмов для выполнения синхронизации.Конечно, внутренняя часть MessageQueue написана для учета синхронизации, хотя это грубое упрощение, чтобы сказать «если несколько потоков обращаются к ней, она должна быть синхронизирована».Хотя пользовательский интерфейс является наиболее частым примером, использование Handler и Looper - это просто механизм для разработки многопоточного приложения, которое обеспечивает однопоточную синхронизацию для обработки событий.
Нужно или нет синхронизироватьвы отправляете обработчику в значительной степени зависит от того, что вы отправляете.Если вы говорите о синхронизации вызовов с вещами post
, то нет, обработчик позаботится об этом.Если вы говорите о коде внутри Runnable, который вы публикуете в обработчике, поймите, что единственная гарантия обработчика - то, что ваш исполняемый файл будет выполняться с использованием потока, создавшего обработчик.Вам нужно будет продолжать обеспечивать синхронизацию с другими ресурсами.