Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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
Java 在saveInstanceState捆绑包中存储大数据结构_Java_Android_Optimization - Fatal编程技术网

Java 在saveInstanceState捆绑包中存储大数据结构

Java 在saveInstanceState捆绑包中存储大数据结构,java,android,optimization,Java,Android,Optimization,我已经读到,如果我们想在活动重新启动旋转设备时保存任何数据,我们必须将所有数据存储在Bundle的saveInstanceState中 但是,若我们想将大数据结构保存在捆绑包中,它会冻结系统并增加内存使用 例如: 我有一个50000000个元素的HashMap。读数来自SD卡。所以,如果我将HashMap保存到Bundle,它会在很长一段时间内冻结设备的旋转 有没有一种方法,我们可以保存数据而不必捆绑存储?例如,将指针保存到HashMap?您绝对不应该这样做。您应该手动处理方向更改,或者将这些数

我已经读到,如果我们想在活动重新启动旋转设备时保存任何数据,我们必须将所有数据存储在Bundle的saveInstanceState中

但是,若我们想将大数据结构保存在捆绑包中,它会冻结系统并增加内存使用

例如: 我有一个50000000个元素的HashMap。读数来自SD卡。所以,如果我将HashMap保存到Bundle,它会在很长一段时间内冻结设备的旋转


有没有一种方法,我们可以保存数据而不必捆绑存储?例如,将指针保存到HashMap?

您绝对不应该这样做。您应该手动处理方向更改,或者将这些数据保留在活动之外,就像在服务中一样。

首先,在Java中没有指针,只有引用。不过,惟一的oneHashMap不是问题,问题在于保存它包含的50000000个元素。如果您确实想这样做,您可以优化文件的读/写,请选中

但你不应该优化这个。正如Donald Knuth所说:

过早优化是万恶之源


您应该编写处理屏幕旋转的代码,以便在旋转过程中不必保存和加载如此大的数据。

有趣。如果每个键都是1字节,并且它们都映射为null,那么在大多数设备上这已经是OutOfMemory错误。我认为数据库是存放这些数据的好地方。谢谢,我不考虑服务,但它对我的应用程序非常有用。