Могут ли события Android «переключаться» в одном потоке

#android #multithreading

#Android #многопоточность

Вопрос:

Я немного смущен и хотел бы подтвердить, что мое понимание того, как потоки работают в Android, правильное.

Поправьте меня, если я ошибаюсь, но, насколько я понимаю, события Android (нажатия кнопок, события касания и т. Д.) Помещаются в основной поток в очередь по мере их запуска, А затем обрабатываются в порядке их поступления.

Однако, если обработка обработчиков для этих событий занимает очень много времени, возможно ли, что поток вернет его в конец очереди, чтобы продолжить позже, или гарантируется, что события будут завершены в том же порядке, в котором они приходят?

Другими словами, если я в данный момент нахожусь в методе A, а затем вызывается onClick (не из метода A), то A всегда завершается до того, как onClick начнет запуск.

Причина, по которой я спрашиваю, заключается в том, что мне нужно знать, нужно ли мне синхронизировать переменные, даже если к ним обращается только один поток.

Спасибо!

Ответ №1:

Это гарантировано. Если код выполняется в потоке пользовательского интерфейса, его нельзя прервать для запуска другого кода в том же потоке.

(Вот почему, когда приложения выполняют слишком много работы в потоке пользовательского интерфейса, приложение не отвечает — сообщения не обрабатываются, потому что поток делает что-то еще).

Комментарии:

1. Это то, что я понял, но я не видел, чтобы это явно указывалось где-либо в документах. Спасибо!

Ответ №2:

Да, любой метод, выполняемый в основном потоке, будет запущен до завершения, прежде чем будет выполнено что-либо еще, поставленное в очередь в основном потоке.