2013-07-31 3 views
3

Как записывается событие с объекта View? Существует только один поток: поток пользовательского интерфейса (когда мы не реализовали ни один из наших собственных потоков). Предположим, что я реализовал onClickListener для кнопки, и функция этой кнопки говорит «отменить». Чтобы событие было поднято кнопкой, то есть отмените все, что делает пользовательский интерфейс, он должен прервать. Так ли это? Они работают как прерываний?Как слушатели Слушания для Android работают?

Руководства API на сайте разработчика - красивые объяснения, но при этом не дают полной картины. http://developer.android.com/guide/topics/ui/ui-events.html

ответ

6

Внутри, Android запускает цикл событий для обработки событий пользовательского интерфейса. Для хорошей диаграммы см. a third slide of this presentation. Эта нить используется для отправки системных вызовов к элементам пользовательского интерфейса:

система не создает отдельный поток для каждого экземпляра компонента. Все компоненты, которые работают в одном процессе, - это , созданный в потоке пользовательского интерфейса, а системные вызовы для каждого компонента - , отправленные с этого потока.

(источник: Processes and Threads)

Посмотрите на Inside the Android Application Framework video от Google I/O 2008. Она имеет хорошее объяснение цикла событий (состоящие из Looper и очереди сообщений). Интересный материал начинается примерно в 26 метрах от видео.

Метод onClick() будет вызываться из того же потока, из которого был вызван оригинал setOnClickListener(). Если это был основной/пользовательский поток, то в слушателе должно быть много разных задач: они будут блокировать поток пользовательского интерфейса и могут привести к тому, что приложение не будет реагировать. Вместо этого используйте такие решения, как AsyncTask.

Подробнее см. На странице this blog post.

0

(Как писал оригинальным спрашивающего)

Так что это? Они работают как прерывания?

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

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/17709052) – amaidment