我应该在 activity 中缓存来自 SharedPreferences 的数据吗?
Should I cache data from SharedPreferences in my activity?
我正在开发一个基于 GCM 的应用程序,用户可以在其中订阅多个主题。
我需要知道用户在两个地方订阅了哪些主题:
- 主 activity - 在 UI
中显示 Subscribe
或 Unsubscribe
按钮
- GCM 侦听器服务 - 过滤消息并通过
GcmPubSub
处理 "obsolete" 订阅。基本上,如果侦听器收到的主题消息不在应用程序的主题列表中,那么可能我们在 GCM 服务器上有一个 "obsolete" 订阅并且必须取消订阅。
所以基本上我有一个 activity 和一个服务,它们都可以访问一些公共数据并且都可以修改这些数据。
我了解到在 activity 和服务之间共享数据的选项之一是使用共享首选项:
- Sharing data amongst activities and services
这很适合我的情况,因为我很乐意分享 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 已经缓存了共享数据。
我正在开发一个基于 GCM 的应用程序,用户可以在其中订阅多个主题。
我需要知道用户在两个地方订阅了哪些主题:
- 主 activity - 在 UI 中显示
- GCM 侦听器服务 - 过滤消息并通过
GcmPubSub
处理 "obsolete" 订阅。基本上,如果侦听器收到的主题消息不在应用程序的主题列表中,那么可能我们在 GCM 服务器上有一个 "obsolete" 订阅并且必须取消订阅。
Subscribe
或 Unsubscribe
按钮
所以基本上我有一个 activity 和一个服务,它们都可以访问一些公共数据并且都可以修改这些数据。
我了解到在 activity 和服务之间共享数据的选项之一是使用共享首选项:
- Sharing data amongst activities and services
这很适合我的情况,因为我很乐意分享 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 已经缓存了共享数据。