#android #multithreading
#Android #многопоточность
Вопрос:
Я немного смущен и хотел бы подтвердить, что мое понимание того, как потоки работают в Android, правильное.
Поправьте меня, если я ошибаюсь, но, насколько я понимаю, события Android (нажатия кнопок, события касания и т. Д.) Помещаются в основной поток в очередь по мере их запуска, А затем обрабатываются в порядке их поступления.
Однако, если обработка обработчиков для этих событий занимает очень много времени, возможно ли, что поток вернет его в конец очереди, чтобы продолжить позже, или гарантируется, что события будут завершены в том же порядке, в котором они приходят?
Другими словами, если я в данный момент нахожусь в методе A, а затем вызывается onClick (не из метода A), то A всегда завершается до того, как onClick начнет запуск.
Причина, по которой я спрашиваю, заключается в том, что мне нужно знать, нужно ли мне синхронизировать переменные, даже если к ним обращается только один поток.
Спасибо!
Ответ №1:
Это гарантировано. Если код выполняется в потоке пользовательского интерфейса, его нельзя прервать для запуска другого кода в том же потоке.
(Вот почему, когда приложения выполняют слишком много работы в потоке пользовательского интерфейса, приложение не отвечает — сообщения не обрабатываются, потому что поток делает что-то еще).
Комментарии:
1. Это то, что я понял, но я не видел, чтобы это явно указывалось где-либо в документах. Спасибо!
Ответ №2:
Да, любой метод, выполняемый в основном потоке, будет запущен до завершения, прежде чем будет выполнено что-либо еще, поставленное в очередь в основном потоке.