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

Should I cache data from SharedPreferences in my activity?

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

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

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

我了解到在 activity 和服务之间共享数据的选项之一是使用共享首选项:

这很适合我的情况,因为我很乐意分享 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 或收到的消息中)以及修改访问共享首选项。

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

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