初めての Android アプリを作成しようとしています。メインスレッド アクティビティ (私の場合: ActionBarActivity) がバックグラウンド アクティビティ (私の場合: IntentService) からイベントの通知を受け取るようにしたいと考えています。これを行うには、ブロードキャストを使用するのが最善の方法であると読んだことがあります。
バックグラウンド アクティビティから送信されたブロードキャストをリッスンするブロードキャスト レシーバーを登録するには、メイン スレッド アクティビティ内で次のコードを使用します。
// Register broadcast receiver
LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.me.myBroadcast");
bManager.registerReceiver(bReceiver, intentFilter);
これをメイン スレッド アクティビティの onCreate() メソッドに入れてみましたが、アクティビティを再起動するたびに (アプリを閉じて再度開くなど)、「重複した」ブロードキャスト レシーバーが作成されているように見えることがすぐにわかりました。次に、単一のブロードキャストが送信されるたびに、ブロードキャスト レシーバーの onReceive() メソッドを複数回トリガーします。これが問題を引き起こしています。
そのため、重複の作成を避けるために、すでにブロードキャスト レシーバーを作成したかどうかを記憶するブール値を保存する SharedPreferences ファイルを作成しました。もちろん、デバイスを再起動するまで、これは期待どおりに機能します。その後、ブロードキャストレシーバーが破棄され、SharedPreferences ブール値が既にあると言うため、アプリは新しいものを作成しません。
デバイスの再起動をリッスンするように新しいブロードキャスト レシーバーをセットアップして、SharedPreferences ブール値をリセットすることで、この問題にパッチを当てることができると思いますが、物事を非常に複雑にしすぎているというしつこい感じがします。私は何が欠けていますか?助けてくれてありがとう!!