Может кто-нибудь объяснить мне, почему только поток пользовательского интерфейса в Android может обновлять пользовательский интерфейс?Почему никакой другой поток не может обновить пользовательский интерфейс?
Документация утверждает, что инструментарий пользовательского интерфейса Android не поточно-ориентированный Таким образом, модель с одним потоком гарантирует, что пользовательский интерфейс не будет изменен разными потоками одновременно.
Как указано в руководстве по разработке Android о теме:
Когда ваше приложение выполняет интенсивную работу в ответ на взаимодействие с пользователем, эта модель с одним потоком может привести к низкой производительности, если вы не реализуете свое приложение должным образом. В частности, если все происходит в потоке пользовательского интерфейса, выполнение длительных операций, таких как доступ к сети или запросы к базе данных, блокирует весь пользовательский интерфейс. Когда поток заблокирован, никакие события не могут быть отправлены, включая события рисования. С точки зрения пользователя приложение кажется зависшим. Еще хуже, если поток пользовательского интерфейса блокируется на более чем несколько секунд (в настоящее время около 5 секунд), пользователю предоставляется печально известный диалог «приложение не отвечает» (ANR). Затем пользователь может решить выйти из приложения и удалить его, если он недоволен. Кроме того, инструментарий Andoid UI не является поточно-ориентированным. Итак, вы должны не манипулировать своим пользовательским интерфейсом из рабочего потока - вы должны сделать все манипуляции с вашим пользовательским интерфейсом из потока пользовательского интерфейса. Таким образом, там это просто два правила для однопоточной модели Android: Не блокировать поток пользовательского интерфейса. Не получать доступ к инструментарию Android UI из вне потока пользовательского интерфейса
Когда ваше приложение выполняет интенсивную работу в ответ на взаимодействие с пользователем, эта модель с одним потоком может привести к низкой производительности, если вы не реализуете свое приложение должным образом. В частности, если все происходит в потоке пользовательского интерфейса, выполнение длительных операций, таких как доступ к сети или запросы к базе данных, блокирует весь пользовательский интерфейс. Когда поток заблокирован, никакие события не могут быть отправлены, включая события рисования. С точки зрения пользователя приложение кажется зависшим. Еще хуже, если поток пользовательского интерфейса блокируется на более чем несколько секунд (в настоящее время около 5 секунд), пользователю предоставляется печально известный диалог «приложение не отвечает» (ANR). Затем пользователь может решить выйти из приложения и удалить его, если он недоволен.
Кроме того, инструментарий Andoid UI не является поточно-ориентированным. Итак, вы должны не манипулировать своим пользовательским интерфейсом из рабочего потока - вы должны сделать все манипуляции с вашим пользовательским интерфейсом из потока пользовательского интерфейса. Таким образом, там это просто два правила для однопоточной модели Android:
Не блокировать поток пользовательского интерфейса. Не получать доступ к инструментарию Android UI из вне потока пользовательского интерфейса