共享首选项“限制”

时间:2013-03-25 14:46:51

标签: android sharedpreferences

我知道类似的问题已被多次询问这个问题,并且通过SO浏览我部分找到答案,但不完整,而且android文档并没有真正帮助。显然我知道它们是如何工作的,并且之前已经多次使用过共享偏好,但是我想知道在什么点(多少)太多了,我读过人们已经存储了~100KBS而没有任何问题。长话短说 - 有人确实存在共享偏好中存储的太多数据以及出现问题的问题,数据是否被删除?

**这只是出于好奇的问题,我已经将我的大值存储在SQL DB中,只是想知道如果出于某种原因将某些内容存储在共享首选项中会出现什么问题

3 个答案:

答案 0 :(得分:44)

由于SharedPreferences存储在XML文件中,因此缺乏SQLite强大的事务支持,我不建议在SharedPreferences中存储“100KBS”。

话虽这么说,我所知道的最小大小限制将是你的可用堆空间量,因为SharedPreferences将整个XML文件的内容读入内存。

答案 1 :(得分:10)

从阅读你的问题我认为你不应该使用SharedPreferences,因为(a)它们用于存储更少量的数据(因此使用XML),以及(b)有许多简单的替代方案。

关于SharedPreferences的唯一“特殊”是与首选项活动的集成,以向用户显示您的偏好,并且根据您计划存储的金额,这可能不适用于您的情况。 (哦,SharePreferences也会为你处理并发问题。)

您可以使用Java的序列化将Preference类存储在二进制文件中。这些将比可比较的PreferenceFile小得多,并且可以轻松地通过GZIPInputStream传递以使其更小(或CipherInputStream)来加密它。我发现这种备用方法是一种功能强大,简单且跨平台的方式来存储不需要SQLite功能的应用数据。

(对不起,这不是一个直接的答案。)

答案 2 :(得分:10)

SharedPreference数据存在限制。在我的情况下,当SharedPreference数据跨越1428.51-kb时,它会抛出一个Memory Exception。

因此,当您需要存储大量数据时,最好使用SQLite数据库。