共享偏好“限制”

Posted

技术标签:

【中文标题】共享偏好“限制”【英文标题】:Shared Preferences "limit" 【发布时间】:2013-03-15 02:41:55 【问题描述】:

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

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

【问题讨论】:

我知道它们的用途和时间,我只是想知道如果使用太多会导致什么问题。 SharedPreferences 主要用于存储一些原始数据类型,我认为没有限制。如果你真的想知道你必须寻找“Android 应用程序最大存储数据量”,我怀疑你会在 SharedPreferences 周围找到答案 感谢Maver1ck,搜索Android应用最大存储数据量 只是稍微扩展我的建议:一旦您使用 SharedPreferences 并使用设置 - 应用程序找到您的应用程序,您将看到“数据”部分不再为零。这就是为什么我认为 SharedPreferences 使用的数据被概括为“应用程序数据”,如果有限制 - 它等于允许应用程序存储的最大数据量 【参考方案1】:

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

话虽如此,我知道的最小大小限制将是您的可用堆空间量,因为SharedPreferences 会将整个 XML 文件的内容读入内存。

【讨论】:

很高兴了解堆大小。但是,我认为我从来没有让 xml 文件变得如此之大。想知道为什么它们首先是 xml 而不是二进制文件(或 json)。 嘿#CommonsWare!您的意思是存储大小约为 100kb 的字符串不是一个好主意? @CommonsWare Shared Preferences 的理想大小应该是多少,这对于 Android 应用程序的顺利运行来说是可以的? @GauravArora:就个人而言,我会尽量保持小:几 KB 左右。 为了子孙后代,我们能否让我们的 Kb/KB/KBs/Kbps 正确!尝试始终对 KB(千字节)和 KBs(其复数)等数据使用大写字母。而 kb 和 kb 为数据速度,后附“ps”。所以速度表示为 kbps/Kbps(每秒千位)。因此,仅数据的“kb”具有误导性。 KBS 听起来像是那些试图大喊其高速的互联网广告之一!哦,8 位 = 1 字节,1024 字节 = 1KB(不是 kb)。干杯!【参考方案2】:

SharedPreference 数据存在限制。在我的情况下,当 SharedPreference 数据跨越 1428.51-kb 时,它会引发内存异常。

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

【讨论】:

你怎么知道有限制。有文件吗?只是好奇,无论如何感谢您的提醒。 在您的研究中吗?如果有任何文件,你能提到它【参考方案3】:

通过阅读您的问题,我认为您不应该使用 SharedPreferences,因为 (a) 它们旨在存储更少量的数据(因此使用 XML),并且 (b) 有许多简单的替代方案。

SharedPreferences 唯一的“特别”之处在于与 Preferences Activity 的集成,用于向用户显示您的偏好,根据您计划存储的数量,这可能不适用于您的情况。 (哦,SharePreferences 也为您处理并发问题。)

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

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

【讨论】:

以上是关于共享偏好“限制”的主要内容,如果未能解决你的问题,请参考以下文章

Android M 奇怪的共享偏好问题

共享偏好? (非常简单的问题!?)

使用共享偏好的登录页面[重复]

如何遍历共享偏好的所有键?

使用共享偏好更改背景

Android Studio - 共享偏好无法保存在新活动中