【问题标题】:Android SharedPreferences limitations?Android SharedPreferences 限制?
【发布时间】:2010-07-08 00:33:42
【问题描述】:

我在 Android 上开发了一款游戏。我目前将大部分游戏统计数据保存在数据库中。但是,该应用程序在数据库中使用的不止一行。我现在有兴趣介绍一些新的统计信息,但这会导致我的数据库重新安装,从而清除每个人的进度。为了将来避免这种情况,我正在考虑使用 SharedPreferences 存储游戏统计数据。我的问题是在它成为问题之前可以以这种方式存储多少不同的东西。总共我将存储大约 40 个值,所有整数。

【问题讨论】:

  • 40 个整数可以存储在 SharedPreferences 中

标签: android database storage sharedpreferences


【解决方案1】:

SharedPreferences 被写入 xml 文件,因此 Android 上文件的最大大小是 SharedPreferences xml 文件的大小。我可以肯定地说,40 个整数值不会有问题。

SharedPreferences 文件中值的最大大小限制为您尝试存储的值的最大大小。 (这意味着你不能在 Java 中放置比字符串更长的字符串值。)

我唯一建议的是确保尽可能批量编辑(意味着不要.commit() 每次更改),也不要为每次更改创建新编辑器。 (这些只是好的做法。)

SharedPreferences settings = getSharedPreferences(PREFS_FILE_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("firstValue", mFirst);
editor.putInt("secondValue", mSecond);
editor.putInt("thirdValue", mThird);

// Commiting the edits
editor.commit();

【讨论】:

  • “比 Java 中的字符串更长” - 字符串可以有 2^31 - 1 = 20 亿个字符。那么,这可能取决于手机的内部存储。
【解决方案2】:

我不知道任何限制,但关于你的问题,每个人的进步都被消灭了。您可以覆盖 SQLite 类中的 onUpgrade 方法,然后将每个人的数据迁移到较新的数据库。

【讨论】:

  • 没错。请参阅记事本示例 - 您可以使用 ALTER TABLE 添加新列。或者你可以添加一个全新的表。您可以切换到 SharedPreferences,但既然您已经采用了数据库方法,那么您最好还是坚持下去。
  • 我想我要试试 SharedPreferences 模型,看看我更喜欢哪个。不过我会保留数据库,因为在某些时候我计划允许保存多个游戏。感谢您提供有关 Alter Table 的提示,它将帮助我迁移到 SharedPreferences 并保存每个人的进度。
【解决方案3】:

请勿对游戏数据使用共享首选项。我可以下载您的游戏并使用下面的工具将其破解。如果你的钱存在那里,我就把它换成 420 万金就行了。

https://www.kingoapp.com/root-tutorials/hack-app-game-cheat-droid.htm

是什么阻止了某人使用共享首选项编辑器编辑他们的 XML 文件?

我不敢相信在回答您的问题时没有人考虑到这一点。在电子游戏环境中,您的限制很重要。没有什么可以阻止任何人编辑他们所有的共享偏好数据以破解游戏中的哔哔声。

【讨论】:

    【解决方案4】:
    猜你喜欢
    • 2011-11-28
    • 2014-03-27
    • 2014-06-12
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多