Как сохранить элементы данных фрагмента при изменении конфигурации?

#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 Я тоже попробую.