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