在saveInstanceState包中存储大数据结构

时间:2013-01-16 22:40:42

标签: java android optimization

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

但是,如果我们想要在bundle中保存大数据结构 - 它会冻结系统并增加内存使用量。

例如:
我有一个HashMap 50,000,000个元素。读数来自SD卡。因此,如果我将HashMap保存到Bundle - 它会冻结设备的旋转一段时间。

有没有办法可以在不存储Bundle的情况下保存数据? (例如,将指针保存到HashMap?)

2 个答案:

答案 0 :(得分:0)

你绝对不应该这样做。您应手动处理方向更改或将此数据保留在活动之外,例如在服务中。

答案 1 :(得分:0)

首先,在Java中没有指针,只有引用。但是唯一一个HashMap不是问题,问题在于保存它包含的50,000,000个元素。如果你真的想这样做,你可以优化文件的读/写,检查this

但你不应该优化它。正如唐纳德克努特所说:

  

过早优化是万恶之源。

您应该编写处理屏幕旋转,以便在旋转期间不必保存和加载这么大的数据。