2017-01-30 3 views
0

У меня есть задача, которая должна выполняться регулярно, каждые несколько секунд, в фоновом режиме. Поэтому я использую m_Handler.postDelayed (не AsyncTask). Каждый раз, когда задача завершается, он снова выключается с другим вызовом postDelayed для повторного запуска через несколько секунд. Исправьте меня, если я ошибаюсь, но я не думал, что можно вызывать AsyncTask через регулярные промежутки времени.Работник Android обнаруживает состояние закрытия операции

Проблема в том, что моя фоновая задача может обнаружить условие, при котором я хочу, чтобы поток пользовательского интерфейса моей активности вызывал setResult, а затем finish(). Другими словами, я хочу, чтобы мой рабочий поток мог сообщить потоку пользовательского интерфейса о прекращении действия.

Есть ли способ для рабочего потока как это сигнализировать потоку пользовательского интерфейса, чтобы что-то сделать? В качестве альтернативы, существует ли способ вызывать AsyncTask через равные промежутки времени? Каков наилучший способ запустить обычную задачу, которая может потребовать закрытия операции?

ответ

0

postDelayed не создает фоновый поток; он отправляет сообщения обработчику, который обычно прикрепляется к потоку пользовательского интерфейса. Поэтому, если вы используете обработчик по умолчанию, вы уже должны быть в основном потоке и сможете завершить работу. Если ваш обработчик находится в другом потоке, вы можете оставить сообщение только в обработчике по умолчанию. В основном, если вы работаете из другого потока в активности, post (или postDelayed) используются для запуска чего-то в основном потоке.

+0

Спасибо Стиву за разъяснение этого и развенчание моего заблуждения. Думаю, теперь я могу найти жизнеспособный дизайн. –

Смежные вопросы