当前位置:  开发笔记 > 运维 > 正文

我应该在活动中缓存来自SharedPreferences的数据吗?

如何解决《我应该在活动中缓存来自SharedPreferences的数据吗?》经验,为你挑选了1个好方法。

我正在开发基于GCM的应用程序,用户可以在其中订阅多个主题.

我需要知道用户在两个地方订阅了哪些主题:

主要活动 - 在UI中显示SubscribeUnsubscribe按钮

GCM侦听器服务 - 通过过滤消息和处理"过时"订阅GcmPubSub.基本上,如果监听器收到的主题消息不在应用程序的主题列表中,那么我们可能在GCM服务器上有一个"过时的"订阅,并且必须取消订阅.

所以基本上我有一个活动和服务,它们都可以访问一些常见的数据,并且都可以修改这些数据.

我已经读过,在活动和服务之间共享数据的一个选项是使用共享首选项:

在活动和服务之间共享数据

这适合我的情况,因为我非常满足于分享Set哪些SharedPreferences支持.用户可能只对几个主题感兴趣(例如,最多10个).

这是我的代码,用于检查用户是否订阅了主题:

SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE);
Set subscribedTopics = preferences.getStringSet(AufzugswaechterPreferences.SUBSCRIBED_TOPICS, Collections.emptySet());
boolean subscribedForTopic = subscribedTopics.contains(topic);

这是修改订阅的代码(例如取消订阅):

SharedPreferences preferences =
        PreferenceManager.getDefaultSharedPreferences(getContext());
Set topics = new TreeSet(preferences.getStringSet(AufzugswaechterPreferences.SUBSCRIBED_TOPICS, Collections.emptySet()));
topics.remove(topic);
preferences.edit().putStringSet(AufzugswaechterPreferences.SUBSCRIBED_TOPICS, topics).apply();

但现在我怀疑,如果这是一个合适的方式.我将基本上访问每个检查(在UI或收到的消息中)以及修改的共享首选项.

这是正确的方法吗?我应该直接通过首选项在活动和服务之间共享数据,还是应该以某种方式缓存值?



1> cybersam..:

您无需缓存SharedPreferences数据,因为SharedPreferencesImpl已缓存共享数据.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有