Почему только пользовательский интерфейс в Android может обновлять пользовательский интерфейс? - PullRequest
5 голосов
/ 12 октября 2011

Может кто-нибудь объяснить мне, почему только поток пользовательского интерфейса в Android может обновлять пользовательский интерфейс?Почему никакой другой поток не может обновить пользовательский интерфейс?

Ответы [ 2 ]

9 голосов
/ 12 октября 2011

Документация утверждает, что инструментарий пользовательского интерфейса Android не поточно-ориентированный Таким образом, модель с одним потоком гарантирует, что пользовательский интерфейс не будет изменен разными потоками одновременно.

3 голосов
/ 12 октября 2011

Как указано в руководстве по разработке Android о теме:

Когда ваше приложение выполняет интенсивную работу в ответ на взаимодействие с пользователем, эта модель с одним потоком может привести к низкой производительности, если вы не реализуете свое приложение должным образом. В частности, если все происходит в потоке пользовательского интерфейса, выполнение длительных операций, таких как доступ к сети или запросы к базе данных, блокирует весь пользовательский интерфейс. Когда поток заблокирован, никакие события не могут быть отправлены, включая события рисования. С точки зрения пользователя приложение кажется зависшим. Еще хуже, если поток пользовательского интерфейса блокируется на более чем несколько секунд (в настоящее время около 5 секунд), пользователю предоставляется печально известный диалог «приложение не отвечает» (ANR). Затем пользователь может решить выйти из приложения и удалить его, если он недоволен.

Кроме того, инструментарий Andoid UI не является поточно-ориентированным. Итак, вы должны не манипулировать своим пользовательским интерфейсом из рабочего потока - вы должны сделать все манипуляции с вашим пользовательским интерфейсом из потока пользовательского интерфейса. Таким образом, там это просто два правила для однопоточной модели Android:

Не блокировать поток пользовательского интерфейса. Не получать доступ к инструментарию Android UI из вне потока пользовательского интерфейса

...