アンドロイドの内部放送

アプリケーションスコープでブロードキャストを開始することは可能ですか?つまり、アプリケーションからのブロードキャストは検出されませんでしたか?

私はUIにいくつかのイベントを伝えるためにブロードキャストを使用していました。しかし、最近私は別のアプリのために私のコードの一部をリサイクルし、放送は両方のアプリケーションを目覚めさせていることがわかった。だから私は、これの周りには、意図の "行動"の価値を変える以外に方法があるのだろうかと思います

2

6 答え

イントラアプリケーションメッセージの受け渡しを希望する場合は、 LocalBroadcastManager を使用する必要があります。実装のためにこの記事を読む: LocalBroadcastManagerの使い方?

3
追加された

なぜあなたは観察者観察可能なパターンを使用しないのですか?あなたのアプリケーションのJavaクラス間で通信するには?

2
追加された
これはAndroidの優れた解決策ではありません。メモリリークが発生しやすいからです。 UI要素、例えば。アクティビティがオブザーバである場合、アクティビティがリサイクルされる前に適切に削除しない可能性がある多くの状況があります。たとえば、アクティビティがシステムによって強制終了されたりクラッシュしたりする場合でも、オブザーバブルにアクティビティの参照を保持することができます。
追加された 著者 Janus Varmarken,

LocalBroadcastManager を使用してください。サポートライブラリを含める必要がありますが、これはシステムを通じてグローバルなブロードキャストを送信するよりも効率的であるため、この問題を解決するための優れた解決策です。

1
追加された

私はあなたがあなたの行動を変更する必要があると思う、あなたは明示的な意図のsetComponentを使用する場合は、それがうまくいく場合は動作しますが、暗黙の意図のためにアプリケーションで制限することはできません

あなたのアプリケーションに署名することができるシアン色のコードがあります。あなたはあなたの電話に何かをインストールすることを誰もがあなたを除いて新しいアプリをインストールすることができますこれを誰もが復元することができますあなたと同じアクション名でレシーバーを登録します

注意: アプリケーションでの相互通信のためのブロードキャストを使用することは間違っており、通常のプロシージャコール(あなたのケースで可能です)よりも遅いです。私はあなたが通常の電話をしてはならない理由は見当たりません。

1
追加された

@Lukap:署名されたアプリケーションは、すべての Androidバージョンで不可欠な機能です。

Dev Guide:

すべてのアプリケーションに署名が必要です。エミュレータまたはデバイスに署名されていないアプリケーションはインストールされません。

プラス:

注:アプリ内の相互通信にブロードキャストを使用するのは間違っています

This is wrong. There are a number of reasons to use broadcast inside an application, and some situations where you really cannot live without it.

1
追加された

はい、からコンポーネント名を使用できます Intent.setComponent()

しかし、あなたの放送が常にインプロセスになるなら、それを使う必要はありません、ありますか?単純な古い関数呼び出しを使うことができます...

1
追加された