Сделайте AlertDialog в AsyncTask onPreExecute, чтобы остановить doInBackground, пока он не будет закрыт
-
27-10-2019 - |
Вопрос
Есть ли способ предотвратить запуск метода / потока doInBackground в AsyncTask до тех пор, пока не будет закрыт AlertDialog, отображаемый во время метода onPreExecute?
doInBackground предназначен для запуска только после завершения onPreExecute, однако, насколько я могу судить, наличие открытого AlertDialog не мешает завершению onPreExecute.
Подробности: Я сейчас использую свой телефон, поэтому не могу предоставить образец кода, но обзор кода заключается в том, что это приложение требует данных, к которым можно получить доступ только через мобильные данные из-за того, что он находится в сети телекоммуникационной компании. PreExec моей асинтаксической задачи getData сначала проверяет, включен ли Wi-Fi, и, если да, отображает диалоговое окно с предупреждением с параметрами Disable Wifi и Cancel.
Отмена должна завершить задачу, а "Отключить Wi-Fi" - значит отключить Wi-Fi. Затем метод doInBg проверяет, установлено ли соединение с мобильной передачей данных, и, если нет, переходит в цикл ожидания, пока это не произойдет. После этого doInBg получает данные ...
В настоящее время, если Wi-Fi включен, doInBg запускается до закрытия диалогового окна, застревает в цикле сна, пока что-то не вызовет срабатывание мобильного соединения ... Это приводит к потенциальным проблемам, которых я бы хотел избежать.
Решение
Вы можете попробовать запустить его где-нибудь, чтобы проверить, работает ли ваш Wi-Fi, а затем использовать AlertDialogListener, чтобы отслеживать действие кнопок в AlertDIalog.тогда вы можете запустить свой Async внутри AlertDialogListener.