私は、ユーザーがいくつかのトピックをサブスクライブできるGCMベースのアプリケーションに取り組んでいます。
ユーザーがサブスクライブしているトピックを2か所で知る必要があります。
Subscribe
またはUnsubscribe
ボタンを表示するGcmPubSub
ます。基本的に、リスナーがアプリのトピックのリストにないトピックのメッセージを受け取った場合、おそらくGCMサーバーに「廃止された」サブスクリプションがあり、サブスクリプションを解除する必要があります。つまり、基本的に、いくつかの共通データにアクセスし、両方がこのデータを変更できるアクティビティとサービスがあります。
アクティビティとサービスの間でデータを共有するためのオプションの1つは、共有設定を使用することであることを読みました。
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または受信メッセージ)および変更の共有設定にアクセスします。
これは正しい方法ですか?プリファレンスを介してアクティビティとサービス間で直接データを共有する必要がありますか、それとも何らかの方法で値をキャッシュする必要がありますか?
SharedPreferencesImplはすでに共有データをキャッシュしているSharedPreferences
ため、データをキャッシュする必要はありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加