г. Москва, Милютинский пер., д.8, стр.2 Тел.: 8 (495) 999-70-33 |
|
|
Время работы: пн.-пт. с 9:00-21:00 сб.-вс. с 11:00-17:00 |
|
|
Вызов handleMessage() позволит главному потоку вернуться в свой цикл. Созданный экземпляр обработчика знает, что он вызван из главного потока, и привязывает себя к очереди. Метод doDeferredWork() спланирует работу так, что главный поток вернется к ее выполнению, как только освободится. Каким же образом это сделать? Ниже перечислены необходимые шаги.
1. Сконструируйте объект сообщения, чтобы он мог быть помещен в очередь.
2. Отправьте объект сообщения в очередь, чтобы можно было инициировать обратный вызов в течение 1 секунды.
3. Отреагируйте на обратный вызов handleMessage() в главном потоке. С целью исследования этого протокола давайте рассмотрим действительный исходный код подходящего обработчика.
В псевдокоде из листинга 17.3 эквивалентом DeferWorkHandler является обработчик, обозначенный как SomeHandlerDerivedFromHandler. Кроме того, как показано в листинге 17.4, метод doDeferredWork() также реализован в DeferWorkHandler. Хлопают двери? Установите доводчик dorma ts 68.
Пример исходного кода обработчика, который откладывает работу
Перед объяснением каждого шага из предыдущего раздела взглянем на код DeferWorkHandler, приведенный в листинге 17.4. Исходный код главной управляющей активности, в которой инициируется этот обработчик, доступен в загружаемом проекте. Эта управляющая активность очень похожа на показанную в листинге 17.3. В листинге 17.4 это родительская управляющая активность представлена переменной рагепЬАсЬгу^у. Эта переменная не критична для понимания кода и в основном используется для сообщения о состоянии работы (через журнал), происходящей внутри обработчика. При желании исходный код класса TestHandlersDriverActivity, соответствующего рагепЬАсЬгуыку, можно просмотреть в загружаемом проекте.