Android - 在应用程序实例中保存实例状态(TransactionTooLargeException)

Android - Save instance state in Application instance (TransactionTooLargeException )

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

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

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

Activity在后台时会被删除吗?

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

一一回答这些问题:

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

如果您的应用进程已被 OS 终止并随后恢复,则不希望检索该数据。为此,您需要以某种方式将数据持久保存到磁盘。正确处理保存状态总是有两个部分:处理配置更改(如旋转)涉及进程死亡和实际进程死亡和恢复。将状态放入 Application 实例(或任何单例)中可以解决第一个问题,但不能解决第二个问题。

  • Activity在后台时会被删除吗?

取决于您所说的 "in the background" 是什么意思。这有时可能意味着 "the Activity exists but is in the stopped state"。在这种情况下,您的数据很好。但是您的整个应用程序进程可以在应用程序处于后台时被终止,然后在您 return 时恢复。在这种情况下,如果数据没有正确保存到磁盘的某个地方,您的数据就会消失。

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

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