我正在开发基于 GCM 的应用程序,用户可以在其中订阅多个主题。
我需要知道用户在两个地方订阅了哪些主题:
Subscribe
或 Unsubscribe
按钮 GcmPubSub
过滤消息和处理“过时”订阅。基本上,如果监听器收到不在应用程序的主题列表中的主题的消息,那么我们可能在 GCM 服务器上有一个“过时”的订阅并且必须取消订阅。 所以基本上我有一个 Activity 和一个服务,它们都可以访问一些公共(public)数据并且都可以修改这些数据。
我读过在 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 已经缓存了共享数据。