Обработка сообщений, неожиданное поведение с рабочими потоками - PullRequest
0 голосов
/ 07 июня 2011

Я пробую большую программу с фоновым сервисом и реализую (довольно плохо продуманную) процедуру обработки сообщений с использованием базовых объектов-обработчиков.Приложение имеет главное меню с кнопками, которые запускают 6 различных действий.

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

Я решил проблему, просто поместив вызов showDialog () в оператор try, но я быкак более сложное решение, так как это просто кажется неправильным способом сделать что-либо.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Поместите некоторый флаг в onPause() метод действия, который запускает поток, чтобы указать, что он больше не передний план. В onStart() поменяйте флаг.

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

0 голосов
/ 07 июня 2011

Используйте sendBroadcast(), при этом Activity регистрирует BroadcastReceiver для трансляции через registerReceiver() в onResume() и отменяет регистрацию в onPause().Затем он будет обрабатывать событие, только если оно находится на переднем плане.

...