2017-12-05 5 views
0

私はそれが良い/悪い/ちょうどいいデザインであるかどうか誰かが私に教えてくれることを望んで、私のアプリのコミュニケーションがどのように働くかを説明したいと思います。Android:BroadcastReceiverを間違って使用していますか?

私のアプリは、単一のアクティビティ複数のフラグメントです。アクティビティには、プログレスバーアニメーションの表示/非表示やスナックバーの表示など、いくつかの一般的な機能があります。これは、1つの場所でのみ実装する必要がある機能です。

私のフラグメントは、フラグメントにない機能が必要なときはいつでもブロードキャストを送信します。フラグメントは、スナックバーのメッセージを表示したい場合たとえば、私はこのようなブロードキャストを送信します:

localBroadcastManager.sendBroadcast(new SnackBarIntent("Show this text")); 

活動は、この放送を受信し、スナックバーのメッセージを示しています。もちろん、これは片方向のメッセージです。私の断片は放送が受信されたかどうかわかりません。しかし、すべてで、それは動作します。私はどこからでも放送、サービス、アダプターなどを送ることができます。私が望むなら、断片間にブロードキャストを送ることもできます。

これに代わるものがあると私は理解しています。 EventBusがあります。または、私は、ActivityのリファレンスをFragment、Adapterなどに渡すことができます。これは適切なガベージコレクションを妨げる恐ろしいアイデアのように聞こえます。

次に、私の断片がActivityから取得したObservableを購読していると思われるRxJavaがあります。

しかし、この方法でBroadcastReceiverを使用するのは悪いですか?もしそうなら、なぜですか?

答えて

1

間違っていますか?いいえ、彼らはこのようなもののために意味されていました。私は、ローカル放送を使用していて、グローバルなものではないことを確認して効率を上げました。いくつかの選択肢は、より良いAPIまたはより多くの機能を提供するかもしれませんが、それらはすべてほぼ同じことをします。

私は、ブロードキャストするコードの一部が実際に埋め込まれていない限り、ブロードキャストよりもインターフェイスやメソッドの呼び出しが優れていると言います。あらゆる種類のイベントブロードキャストの問題は、送信者と受信者を切り離すことです。そうしなければ、オブジェクトを複数のレベルまたはシステムのその部分について知ってはいけない場所に渡す必要があるときに、これは利点があります。しかし、特に複数の場所が同じバスに同じようなメッセージを置くことができる場合、保守に欠点があります。

+0

ありがとうございました。あなたがインターフェースと言うとき、アクティビティーがインターフェースを実装すべきだと言っていますか?そのインターフェースをフラグメントに渡しますか?フラグメントがアクティビティへの参照を保持すると、メモリリークが発生する可能性があります。 –

関連する問題