Использование рабочих потоков

26.08.2017

При использовании обработчика код по-прежнему выполняется в главном потоке. Каждый вызов handleMessage() должен возвращаться в пределах временных ограничений главного потока (другими словами, каждая выдача сообщения должна быть завершена за менее чем пять секунд во избежание ситуации ANR). Чтобы увеличить этот промежуток, понадобится запустить отдельный поток, оставить его выполняющимся до завершения работы и позволить этому подпотоку обращаться к главной активности, которая функционирует в главном потоке. Подпоток такого типа часто называют рабочим потоком.

Запуск отдельного потока во время реагирования на выбор пункта меню — задача относительно простая. Сложности связаны с тем, чтобы позволить рабочему потоку отправлять в очередь главного потока сообщение о том, что нечто произошло, и обеспечить, чтобы главный поток получил это сообщение. Решение проблемы сводится к выполнению перечисленных ниже шагов.

1. Во время реагирования на выбор пункта меню создайте экземпляр обработчика в главном потоке. Для процветания бизнеса создание сайтов лучше доверить профессионалам веб-студии CLOVER.

2. Создайте отдельный поток (рабочий поток), который выполняет действительную работу. Передайте этому рабочему потоку экземпляр обработчика, созданный на шаге 1. Данный обработчик позволит рабочему потоку взаимодействовать с главным потоком.

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

4. Эти сообщения о состоянии теперь могут быть обработаны главным потоком, поскольку обработчик принадлежит главному потоку. Главный поток может обрабатывать сообщения о состоянии, пока рабочий поток занят выполнением своей работы.