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 .
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 .