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

时间:2016-01-08 18:46:46

标签: android google-cloud-messaging

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

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

  • 主要活动 - 在用户界面中显示SubscribeUnsubscribe按钮
  • GCM侦听器服务 - 过滤消息并处理"过时"通过GcmPubSub订阅。基本上,如果听众收到的主题消息不在应用程序的主题列表中,那么我们可能会有一个过时的"订阅GCM服务器并且必须取消订阅。

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

我读过在活动和服务之间共享数据的其中一个选项是使用共享偏好设置:

这适用于我的情况,因为我非常满意地分享Set<String>支持SharedPreferences。用户可能只对几个主题感兴趣(例如,最多10个)。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:6)

您无需缓存SharedPreferences数据,因为SharedPreferencesImpl已经缓存了共享数据。