【发布时间】:2016-09-29 12:01:34
【问题描述】:
如果包裹大小超过限制,Android 7.0 在恢复实例状态时开始抛出 TransactionTooLargeException。
但我的应用程序必须保存没有大小限制的加载内容。 所以很容易导致这个错误。
在Application实例中保存实例状态安全吗?
Activity在后台时会被删除吗?
有没有办法保存大数据而不抛出这个异常?
【问题讨论】:
-
由于我们不知道存储数据的性质,所以会有很多选择。在 SharedPreferences/File/etc 支持的保留 Fragment 中使用 Loader 或 SharedPreferences 或变量。
-
我必须保存我的应用从服务器下载的数据。并且数据将被解析成一些复杂的对象。在这种情况下,既不能使用 Loader 也不能使用 SharedPreferences。并且在Android杀死我的应用程序后片段将被销毁,在这种情况下保留的片段如何工作?我真正想知道的是,当应用被Android杀死时,如何保存大数据并恢复它?
-
当你的应用程序被杀死时,它并不存在于内存中。所以任何数据都必须从持久模型/存储中加载。您的数据集应保存在硬盘上并根据需要加载到对象中。保存状态不是保留整个模型的工具。
-
你的意思是每次调用 onSaveInstanceState 时我都必须将它保存到数据库或缓存中?
-
一点也不。每次从 Internet 获取数据时,您都会将其保存到存储中,并且每次存储中的数据更改时,您都会将更改广播到 ui。您的数据模型永远不会触及已保存的状态。
标签: android android-lifecycle android-7.0-nougat onrestoreinstancestate onsaveinstancestate