TransactionTooLargeexception отражает ограничения механизма IP C для Android в том, как данные передаются между процессами.
Поскольку вы обмениваетесь данными между действиями с учетом имеющихся у вас ограничений, мне в голову пришли следующие возможности:
- хранение данных в единственном экземпляре репозитория (который требует ответственности за перезагрузку данные в случае, если они теряются во время воссоздания действий и т. д. c.) и передачи только уникальных неопределителей (или идентификаторов)
- уменьшают размер данных путем простого преобразования или сжатия данных (целое число вместо числа с плавающей запятой, долго для Date et c.)
- , как отмечает @nsk, с шиной событий вы можете преодолеть ограничения IP C, но это приносит "удовольствие" с жизненным циклом деятельности
- kotlin привносит в игру
kotlinx.serialization
, с моей стороны не так много опыта, но вы наверняка сможете что-то оценить (производительность и объем данных)
Независимо от выбранного решения вашей проблемы, я бы рекомендовал использовать Parcelable
вместо Seriazable
для Intent
, в основном из соображений производительности, рефлексия все еще остается проблемой, и я едва могу вспомнить Mber, имеющий предупреждения Lint. Для Parcelable
с Kotlin действительно есть удобное решение с аннотацией Parcelize
, предоставляемой Kotlin Android Extensions library.
Простой объект выглядит так
@Parcelize
class Student(val name: String, val year: Int) : Parcelable