Много гуглю, но сейчас решил спросить..
Моя деятельность делает только одну простую вещь - загружает изображение из Интернета с помощью AsyncTask.
Но есть много проблем, которые я не знаю, как решить.
1.] Пользователь поворачивает экран после того, как AsyncTask загрузил изображение. Как мне справиться с этим поворотом экрана? Где временно сохранить изображение, чтобы оно было доступно после воссоздания активности?
Я не хочу блокировать ориентацию экрана (android:screenOrientation="landscape") или управлять ею самостоятельно (android:configChanges="orientation").
Я просто хочу сохранить картинку куда-нибудь..
Я знаю, что это можно сделать с помощью onRetainNonConfigurationInstance() и getLastNonConfigurationInstance(), но оба устарели. Bundle не подходит для изображений, потому что он создан для строковых (сериализуемых) данных. Я могу сохранить картинку в базу данных или куда-нибудь в файл, но это не нужно. Я где-то читал, что это можно сделать через Loader, но не знаю как? Является ли это возможным?
2.] Пользователь поворачивает экран во время загрузки изображения AsyncTask.
Я хочу, чтобы AsyncTask продолжил загрузку. После завершения загрузки AsyncTask должен сохранить изображение в новой (воссозданной) активности в методе onPostExecute.
Я думаю, что если AsyncTask является внутренним классом активности, он работает..? Но если я не хочу, чтобы это был внутренний класс, я должен сохранить ссылку на активность, например, в переменной. Но если я отправлю ссылку на Activity как параметр конструктора AsyncTask, а Activity воссоздается после поворота экрана, переменная в AsyncTask действительно ссылается на исходное действие, и поэтому новое не знает о загруженном изображении, и ему нужно начать загрузку снова ..
Или AsyncTask плохой выбор для загрузки изображения? Должен ли я использовать что-то еще? Услуга?
Итак.. Как решить эти проблемы? Я уверен, что многим разработчикам приложений тоже приходится решать эту проблему. Но для меня это все по-гречески :(