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

问题描述 投票:0回答:1

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

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

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

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

有没有办法保存大数据而不抛出这个异常?

android android-lifecycle android-7.0-nougat onrestoreinstancestate onsaveinstancestate
1个回答
0
投票

逐一回答这些问题:

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

如果想要在应用程序的进程被操作系统杀死并稍后恢复后检索该数据,则不会。为此,您需要以某种方式将数据保存到磁盘。总是有两个部分可以正确处理保存状态:处理配置更改(如旋转),这些更改不涉及过程死亡和实际过程死亡和恢复。将状态放在Application实例(或任何单例)中可以解决第一个问题而不是第二个问题。

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

取决于你在“在后台”的意思。这有时可能意味着“活动存在但处于停止状态”。在这种情况下,您的数据很好。但是,您的整个应用程序进程可能会在应用程序后台运行时被终止,并在您返回时进行恢复。在这种情况下,如果没有正确保存到某个磁盘,您的数据将会消失。

  • 有没有办法保存大数据而不抛出这个异常?

是的,将其写入数据库并从那里恢复数据。或者,您可以使用此库自动处理您的Bundles到/从磁盘的持久/恢复:https://github.com/livefront/bridge

© www.soinside.com 2019 - 2024. All rights reserved.