#android
#Android
Вопрос:
У меня есть фрагмент, который создает AsyncTask
для загрузки и анализа RSS-канала, а затем отображает его в списке. Проблема в том, что загруженный канал хранится в RSSFeed
объекте, и он становится нулевым, когда фрагмент воссоздается после поворота экрана. Это означает, что каждый раз, когда пользователь поворачивает экран, приложение должно повторно загружать канал, тратя время и пропускную способность. Я мог бы загрузить кэшированную копию xml, но это все равно требует времени и является плохим UX.
До сих пор я использовал setRetainInstance(true)
in the fragment, и, похоже, это работает. Тем не менее, я недавно прочитал, что не рекомендуется использовать setRetainInstance(true
) во фрагменте с пользовательским интерфейсом, что-то об утечке контекста. Я также видел, как другие люди говорили, что это нормально и даже рекомендуется, если вы переназначаете значение для представлений после воссоздания действия. Я не уверен, насколько точен любой из ответов, некоторая помощь здесь была бы признательна.
Предполагая, что я не использую setRetainInstance(true)
, а фрагмент воссоздается при изменении конфигурации, я хотел бы найти способ сохранить только этот объект. Если бы это была строка или int, я знаю, что нужно использовать onSaveInstanceState и bundle , но дело в том, что этот канал не является сериализуемым, и при этом не рекомендуется сериализовать и десериализовать потенциально большой объект. Итак, второй вопрос: что я могу сделать, чтобы сохранить канал, чтобы мне не приходилось перезагружать его снова?
Комментарии:
1. Вы можете сделать массив разделяемым
2. Спасибо, я попробую.
3. Создайте отдельный фрагмент без пользовательского интерфейса с помощью setRetainInstance(true) и вызовите из него AsyncTask?
4. После прочтения parcelable кажется, что он не идеален. Объект feed — это не просто строка, там есть и другие объекты — не мои. Сделать все разделяемым было бы очень сложно, если не невозможно. @blyabtroi Я тоже попробую.