SanchelliosProg
@SanchelliosProg
Java, Android, Software Testing

Возможно ли сохранять коллекции объектов в Bundle (onSaveInstanceState(Bundle))?

Например, у меня есть коллекция Queue, содержащая в себе экземпляры класса Word, возможно ли её запихнуть в Bundle, чтобы при пересоздании activity доставать оттуда? Или возможно сохранять только примтивные инстансы или коллекции строк?
  • Вопрос задан
  • 1115 просмотров
Решения вопроса 2
LeEnot
@LeEnot
Енот-андроид
Используйте `putSerializable(String, Serializable)` метод.
Ваша Queue должна имплементировать интерфейс Serializable и тогда ее можно пихнуть в Bundle.
Насколько я помню, объект в очереди тоже должен быть Serializable.
Bundle bundle = new Bundle();
Queue<Word> queue = new LinkedBlockingQueue();
bundle.putSerializable("my_queue", queue);

Однако затраты на сериализацию "тяжелых" объектов могут быть достаточно высоки.
Ответ написан
Комментировать
gadfi
@gadfi
https://gamega.org
можно, есть два основных варианта Serializable и Parcelable

Serializable дольше чем Parcelable, но если предпологаются не большие объемы данных смело используйте, недостаток производительности компенсируется скоростью реализации
Parcelable рекомендован гуглом, работает быстрее чем Serializable но требует дополнительных движений, есть плагины для android studio/inetelij idea, которые сделают все за вас, но на сложных объектах они иногда не правильно работают(около года назад было именно так, может сейчас получше)
startandroid parcelable

+ можно использовать gson и передавать строку
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
ну в случае с очередью. - я бы лучше использовал элемент Parcelable. как раз можно и удобно восстановить всю очередь. и затраты на сериализацию объектов удастся избежать.
Ответ написан
Комментировать
atetc
@atetc
Админ Android dev-s чата: https://goo.gl/8JKF1f
Еще вариант - структуру данных "Queue" реализовать в виде таблицы БД (логику работы этой несложной структуры - в отдельном классе) и не надо никакой сериализации, работаем с классом как с оберткой. Доступ через ч/з стат. методы класса, либо проинжектить через DI (Dagger2 например).

P.S. если у кого есть возражения, пишите каментом, интересно обсудить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы