У меня есть действие, в котором я собираю данные для онлайн-транзакции. Когда сборка завершена, я запускаю фоновый поток (точнее AsyncTask), который вызывает веб-сервис и ждет его ответа, а затем возвращаю его в действие. Тем временем появляется диалоговое окно прогресса.
Я хочу, чтобы фоновый процесс был отменен, если приложение завершается или пользователь отменяет (однако мне все еще нужно уведомить веб-службу), и сохраняется, если действие уничтожается из-за изменения конфигурации или * 1004. * чтобы освободить память. Я понимаю, что буду использовать onRetainNonConfigurationInstance (), чтобы отсоединить свою активность от AsyncTask, сохранить ее, а затем снова присоединить в следующем действии, у меня уже есть инфраструктура для этого. Я также знаю, что в некоторых обратных вызовах жизненного цикла метод isFinishing сообщает мне, нормально ли закрывается мое приложение; и я верю, что могу также обработать отмену пользователя в обратном вызове диалога прогресса.
У меня есть два простых вопроса:
Будет вызываться onRetainNonConfigurationInstance (), если моя активность
убит из-за нехватки памяти? (Я знаю, что это будет, если причина
изменение конфигурации.)
В какой ситуации (как подчеркивается в руководстве разработчика) onStop () и onDestroy () не вызываются? (Я хочу знать, если мой
код, обрабатывающий отмену, всегда будет выполняться.)
В общем, могу ли я быть уверен, что при реализации onRetainNonConfigurationInstance () и onDestroy () с проверенным isFinishing () в каждой ситуации мой фоновый поток будет обрабатываться соответствующим образом?
БОНУСНЫЙ вопрос: Если моё приложение по какой-то причине убито (скажем, навсегда), как я могу предоставить AsyncTask способ сохранить ответ в любом случае? Могу ли я сохранить в нем экземпляр общих настроек и записать в него данные?