Android - 在Application实例中保存实例状态(TransactionTooLargeException)

时间:2016-09-29 12:01:35

标签: android android-lifecycle android-7.0-nougat onrestoreinstancestate onsaveinstancestate

如果宗地大小超过限制,Android 7.0会在恢复实例状态时开始抛出TransactionTooLargeException。

但我的应用程序必须保存没有大小限制的已加载内容。 所以很容易导致这个错误。

在Application实例中保存实例状态是否安全?

活动在后台时会被删除吗?

有没有办法在不抛出此异常的情况下保存大数据?

1 个答案:

答案 0 :(得分:0)

要一一回答这些问题:

  • 在应用程序实例中保存实例状态是否安全?

如果不想在应用程序的进程已被操作系统终止并随后还原后检索数据。为此,您需要以某种方式将数据持久化到磁盘。正确处理保存状态始终有两个部分:处理配置更改(如轮换),不涉及进程终止以及实际进程终止和恢复。将状态放在Application实例(或任何单例)中可以解决第一个问题,但不能解决第二个问题。

  • 活动处于后台时会删除吗?

取决于“在后台”的含义。有时可能表示“活动存在,但处于停止状态”。在这种情况下,您的数据就可以了。但是,当应用程序后台运行时,您的整个应用程序进程可能会被杀死,然后在返回时恢复。在这种情况下,如果您的数据没有正确地保存到磁盘上的某个地方,它将消失。

  • 有没有一种方法可以保存大数据而不会引发此异常?

是的,将其写入数据库,然后从那里还原数据。另外,您可以使用此库为您自动处理将捆绑包从磁盘持久保存/还原到磁盘:https://github.com/livefront/bridge