Android-сохранение состояния экземпляра в экземпляре приложения (TransactionTooLargeException )

Android 7.0 запускает TransactionTooLargeException при восстановлении состояния экземпляра, если размер участка превышает ограничение.

Но мое приложение должно сохранить загруженный контент, который не имеет ограничений по размеру.
Так что это очень легко вызвать эту ошибку.

Безопасно ли сохранять состояние экземпляра в экземпляре приложения?

Будет ли он удален в фоновом режиме?

Есть ли способ сохранить большие данные без создания этого исключения?

1 ответ

  1. Ответы на эти вопросы один за другим :

    • Безопасно ли сохранять состояние экземпляра в экземпляре приложения?

    Нет, если вы хотите получить эти данные после того, как процесс вашего приложения был убит ОС и позже восстановлен. Для этого нужно каким-то образом сохранить данные на диск. Всегда есть две части для правильной обработки состояния сохранения: обработка изменений конфигурации (например, вращения), которые не связаны со смертью процесса и фактической смертью процесса и восстановлением. Включение состояния в экземпляр приложения (или любой синглтон) решает первую проблему, но не вторую.

    • Будет ли он удален в фоновом режиме?

    Зависит от того, что вы подразумеваете под «фоном». Иногда это может означать, что «действие существует, но находится в остановленном состоянии». В этом случае ваши данные в порядке. Но весь ваш процесс приложения может быть убит, пока приложение находится в фоновом режиме и позже восстановлено при возвращении. В этом случае ваши данные исчезнут, если они не будут должным образом сохранены на диске где-то.

    • Есть ли способ сохранить большие данные без создания этого исключения?

    Да, запишите его в базу данных и восстановите данные оттуда. Кроме того, можно использовать эту библиотеку, которая автоматически обрабатывает сохранение / восстановление пакетов на / с диска для вас : https://github.com/livefront/bridge .