Делает ли публикация Runnable с обработчиком асинхронным? - PullRequest
0 голосов
/ 26 июля 2011

Я обновляю пользовательский интерфейс действия из BroadcastReceiver, который я регистрирую в том же действии. Документы API говорят:

[...] Функция [onReceive ()] обычно вызывается в основном потоке его процесса [...]

так что я полагаю, что обновление пользовательского интерфейса в порядке.

В документах также сказано:

[...] вы никогда не должны выполнять в нем длительные операции (есть тайм-аут 10 секунд [...]

Я просто устанавливаю некоторый текст в TextView, так что я полагаю, что это не займет больше 10 секунд.

Но, и вот, наконец, мой актуальный вопрос: имеет ли смысл вообще добавлять Runnable в очередь сообщений основного потока, используя Handler, чтобы onReceive () мог вернуться немедленно, а обновление пользовательского интерфейса произойдет позже. момент времени, как предполагают документы:

Существует два основных способа использования обработчика: (1) для планирования сообщений и выполняемые объекты, которые должны быть выполнены как некая точка в будущем; [...]

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Если вы просто устанавливаете текст на TextView s, у вас не будет проблем.Не нужно слишком усложнять вещи с помощью Handler s.

Хотя я скажу, что некоторым людям нравится использовать обработчики только потому, что они упорядочивают вещи, если нужно вызывать несколько вызовов определенного метода пользовательского интерфейса.Использование обработчика гарантирует, что этот исполняемый код будет изначально размещен в потоке пользовательского интерфейса, поэтому не нужно проверять, в каком потоке вы работаете.

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

1 голос
/ 26 июля 2011

Да, использование Handler для планирования Runnable является стандартом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...