Например, мы находимся в SomeActivity, и в действии есть кнопка, которая вызывает перемещение файлов из одного каталога в другой (позвольте ему выполнить задание).
В BlackBerry я бы:
- нажмите всплывающее окно с отменой отмены (диалоговое окно), в котором говорится: "Пожалуйста, подождите..."
- запустить поток, который выполняет задание
- при завершении потока закрыть всплывающее окно
Этот подход 99,99% может гарантировать, что мы останемся на том же экране после завершения задачи, пользователь просто увидит всплывающее окно и ждет завершения работы. Вращение устройства или что-то другое не прерывает желаемый рабочий процесс.
На Android все меняется. Я знаю, что AsyncTask, вероятно, предоставляется для решения моего дела. Там даже хороший пример того, как он должен использоваться. Но так как нет гарантии того, как долго экземпляр Activity будет жить, AsyncTask должен быть отменен onSaveInstanceState (и перезапущен на onRestoreInstanceState). Это означает, что использование AsyncTask не гарантирует, что мы сможем полностью выполнить задание после его запуска. В некоторых случаях при отправке запроса на отправку HTTP для создания пользователя я бы не захотел войти в проблему "пользователь уже существует для этого входа" при повторном запуске AsyncTask. Это возможно, так как AsyncTask может быть прерван, пока запрос уже отправлен (и сервер фактически выполняет свою работу - создание нового пользователя), но AsyncTask отменяется, прежде чем мы получим ответ.
Есть ли какое-либо решение на Android для того, чтобы получить описанное выше BB-поведение?