共享首选项"限制"

Mar*_*vic 33 android sharedpreferences

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

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

Com*_*are 44

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

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

  • 很高兴知道堆大小.但是,我认为我没有让xml文件如此之大.想知道为什么它们首先是xml而不是二进制文件(或json). (8认同)
  • 为了后代,我们可以让我们的 Kb/KB/KBs/Kbps 正确吗!尝试始终对 KB(千字节)和 KB(复数)等数据使用大写字母。而kb和kb表示数据速度,附有“ps”。因此速度表示为 kbps/Kbps(每秒千位)。因此,仅用于数据的“kb”具有误导性。而 KBS 听起来像是那些试图高喊其高速的互联网广告之一!哦,8bits = 1 Byte 和 1024Bytes = 1KB(不是 kb)。干杯! (4认同)
  • @GauravArora:就个人而言,我会尽量保持较小的大小:几KB左右。 (2认同)

Tom*_*Tom 10

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

关于SharedPreferences的唯一"特殊"是与首选项活动集成以向用户显示您的首选项,这可能不适用于您计划存储的金额.(哦,SharePreferences也为你处理并发问题.)

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

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


man*_*ani 10

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

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

  • 你怎么知道有一个限制。有文档吗?只是好奇,无论如何,谢谢您的提醒。 (3认同)
  • 这是你的研究吗?如果有任何文档你可以提到吗 (2认同)