【问题标题】:Best place to store custom objects so all activities can see them存储自定义对象的最佳位置,以便所有活动都可以看到它们
【发布时间】:2016-09-07 16:03:01
【问题描述】:

我是一名正在尝试学习 Android 的 iOS 开发人员,我想确保我遵循最佳实践。

我有自定义对象需要 1 -> m 活动访问,并且需要在应用程序关闭时保存它们。目前我正在使用 SharedPreferences(下面的代码)来保存它们,但我不确定这是否是最佳路线。我应该使用单例吗?有没有更好的办法?

SharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);
Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(userProfile);
prefsEditor.putString("UserProfile", json);
prefsEditor.commit();

gson = new Gson();
json = mPrefs.getString("UserProfile", "");
UserProfileObject outObject = gson.fromJson(json, UserProfileObject.class);

【问题讨论】:

    标签: java android sharedpreferences custom-object


    【解决方案1】:

    应用程序退出时不会保存单例。确实,您的选择是:

    *共享首选项。适用于少量键/值对

    *数据库。适合关系数据

    *磁盘上的文件,以您喜欢的任何格式。适用于任何数量的数据,但您可能需要编写自定义解析器。

    在共享首选项中存储 json 有点奇怪。只要您没有在其中存储很多密钥,这并不可怕,但这会让您看起来好像不知道如何编写文件。

    【讨论】:

    • 我正在通过谷歌搜索学习android开发,我可以弄清楚如何编写文件。谢谢
    【解决方案2】:

    @Gabe 提供了一个很好的答案。我要加我的 2 美分

    我个人不喜欢将序列化数据保存在 SharedPreferences 中。相反,我会使用本地数据库存储,例如 SQLite 或 Realm 来存储它。序列化/反序列化的原因涉及使用反射对对象进行编组/解组,这可能会对性能造成负面影响。

    简而言之,使用本地数据库存储复杂/关系数据,使用 SharedPreferences 存储简单数据

    【讨论】:

      【解决方案3】:

      我认为如果您的UserProfileObject 可以很容易地从 Json 构建并且它不包含任何敏感数据(即密码),那么将它放在 SharedPreferences 中可能会很好(只需像您一样保存 json 字符串正在做)。

      使用单例 SessionManager / ProfileManager 类就足够了。即使它可能被 1 -> m 活动使用,它也只会在使用单例时命中 SharedPreferences 一次。只要确保在有更改时保持单例和SharedPreferences 中的数据副本同步即可。或者只是将单例全部转储并在每次需要时点击SharedPreferences(不必担心保持副本同步),不要认为您的用例会对其造成太大影响。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2023-03-26
        • 2016-02-09
        • 1970-01-01
        • 1970-01-01
        • 2014-11-16
        • 2015-02-18
        相关资源
        最近更新 更多