Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onSaveInstanceState限制?_Android - Fatal编程技术网

Android onSaveInstanceState限制?

Android onSaveInstanceState限制?,android,Android,自从不推荐使用I以来,我越来越多地利用框架进行配置更改。由于我使用ViewPager来保存我无法使用的主要片段,这将限制我的配置更改在SaveInstanceState上使用,就像标准活动或视图一样 它工作得非常完美,没有任何问题,但我目前正在通过它传递一个相当大的可序列化数据集,这让我想了解社区对这是否是一个好主意的意见 tl;dr:onSaveInstanceState对通过它的内容有大小限制吗?该限制是内存限制,因为您没有OutOfMemory错误,所以应该没有问题 只需确保传递对象上没有

自从不推荐使用I以来,我越来越多地利用框架进行配置更改。由于我使用ViewPager来保存我无法使用的主要片段,这将限制我的配置更改在SaveInstanceState上使用,就像标准活动或视图一样

它工作得非常完美,没有任何问题,但我目前正在通过它传递一个相当大的可序列化数据集,这让我想了解社区对这是否是一个好主意的意见


tl;dr:onSaveInstanceState对通过它的内容有大小限制吗?

该限制是内存限制,因为您没有OutOfMemory错误,所以应该没有问题


只需确保传递对象上没有任何视图或上下文,因为如果用户不断改变方向,这可能会导致内存使用量快速增长。

说一些比“相当大”更有用的话。:)


该数据通过IPC传输,IPC限制约为1MB。您希望使编组的大小大大小于此值;100K可能是一个很好的最大值。实际上,您希望尽可能地将数据保持在较小的范围内(请考虑您在其中放置的内容,不要浪费空间),因为即使您自己的进程被终止,这些数据也必须由系统保存在RAM中。

我想它不会。可能它使用了
SharedReferences
——我猜是这样。“既然我使用了ViewPager来保存我的主要片段,我就不能使用setRetainInstance”--为什么你认为你不能在
ViewPager
中使用
setRetainInstance()
?我找不到任何地方引用这一限制。有联系吗?谢谢它根本不起作用,可能是个bug。我尝试了
FragmentPagerAdapter
FragmentStatePagerAdapter
两种方法,但都没有使片段在
setRetainInstance()中正常工作。当我将它们从
ViewPager
移动到类似(见下文)的标准开关时,一切正常。如果应用程序被回收,它如何保存在内存中?即使在那时,这些信息也是持久的,所以我知道它不能被任何依赖于应用程序的内存保存,所以当然OutOfMemoryErrors不会在应用程序本身上发生。我明确表示我正在传递可序列化对象,不可能通过它传递视图或上下文。但是,如果您确实通过OnRetainonConfiguration实例传递了一个,那么它将泄漏整个活动,因此是的,它最终会在该场景中的配置更改时耗尽内存。