Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 从SharedPreferences读取并保留对象的实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
情景 @H_197_5@ @H_197_5@我有一个使用用户设置的请求列表的类.请求列表存储在SharedPreferences中.我面临的困境是每次需要请求列表时是保留请求列表的实例还是从SharedPreferences读取(这是非常频繁的).

@H_197_5@也不是说Gson用于反序列化对象.

@H_197_5@代码如下:

@H_197_5@
public List<PrayerTimesCalculator.Time> getDefaultrequestList() {
    if (mrequestList != null) return mrequestList;
    // Try getTing request list from preferences;
    Gson gson = new Gson();
    String json = mSharedPref.getString(KEY_PREF_requEST_LIST,null);
    Type listType = new TypeToken<List<Time>>() {
    }.getType();
    mrequestList = gson.fromJson(json,listTypE);
    if (mrequestList != null) return mrequestList;
    // Create default list;
    mrequestList = Arrays.asList(
           Time.DAWN,Time.MORNING,Time.AFTERNOON,Time.EVENING,Time.MID_NIGHT);
    return mrequestList;
}
@H_197_5@目标

@H_197_5@我担心的是,如果我保留请求列表的实例,并且该类有多个实例,则在重新创建其他实例之前,对该类的一个实例中的请求列表的更新将不会反映出来. .

@H_197_5@因此,我倾向于从SharedPreferences中读取,除非有更好的方法来保持请求列表在所有实例中都被更新.

@H_197_5@问题

@H_197_5@(1)那么,对象的多个实例经常从SharedPreferences中读取相同的密钥效率如何? (2)是否有更好的方法来保持请求列表在所有情况下都被更新

解决方法

因此,您可以采取几种方法. @H_197_5@ @H_197_5@首先,你的对象很小 – 重读几千次SharedPreferences几乎不会引人注意.它不像SharedPreferences在远程驱动器上或“连接不良”.

@H_197_5@其次,如果你不喜欢这个答案,那么你需要一个DAO(数据访问对象). SharedPreferences已经是这种形式.它提供了一种存储和检索数据的方法,您可以放心地获得最新的数据.但是,如果您觉得可以改进它的优化(因为它是通用的,这是您的应用程序),那么您可以通过执行“读取”和“写入”操作的静态对象提供对数据的访问.这将保证使用最新数据完成对对象的访问.当然,您需要具有线程感知等等(SharedPreferences并不总能保证这一点).

@H_197_5@接下来,您可以将数据保存在数据库中并使用游标或其他内置或自定义DAO.这需要另一层次的复杂性和大量开销,但是当应用程序的多个组件可能需要访问数据,提供更新或需要实时监视更改时非常有用,因为后台线程或其他对象可能会进行修改您的应用行为或UI更新结果.

@H_197_5@最后,您可以使用更复杂的数据存储,例如Content Provider.如果您希望/需要其他应用访问您的应用提供的数据(并且您的应用也可能使用该数据),则确实需要这样做.这是一个复杂的解决方案,实现完全超出了这个问题的范围.

@H_197_5@但我提到它是因为您似乎有兴趣确保频繁读取SharedPreferences是可以接受的.它绝对是可以接受的 – 除此之外还有其他东西,数据库内容提供商.

大佬总结

以上是大佬教程为你收集整理的android – 从SharedPreferences读取并保留对象的实例全部内容,希望文章能够帮你解决android – 从SharedPreferences读取并保留对象的实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。