2011-10-28 9 views
2

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

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

答えて

3

イントラアプリケーションメッセージの受け渡しを希望する場合は、LocalBroadcastManagerを使用してください。実装のためにこの記事を読む:how to use LocalBroadcastManager?

1

はい、Intent.setComponent()でコンポーネント名を使うことができます。

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

2

observer-observable patternをあなたのアプリケーションのJavaクラス間で通信するのはなぜですか?

+0

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

1

私はあなたが明示的な意図だsetComponentを使用する場合それはそれが動作するあなたのための罰金ですが、暗黙の意図のためには、アプリケーションによって

を制限することはできません場合は、あなたの行動を変更する必要があります、その後、cyanogenmodがあると思いますあなたのアプリケーションに署名することができますし、あなたは携帯電話に何かをインストールするものを誰もあなたが新しいアプリケーション(あなたを除く)をインストールすることができますこれは誰もが受信者を登録することはできません復元することができます

注: ブロードキャストを使用してアプリ内でのコミュニケーションが間違っていて、遅くなっていますプロシージャへのコール(あなたのケースで可能です)。私はあなたが通常の電話をしてはならない理由は見当たりません。

1

@Lukap:署名されたアプリケーションは、のすべての重要な機能です。 Androidのバージョンでは、許可された当事者のみがインストールされたアプリケーションの更新/変更を提供できます。

Dev Guide

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

プラス:

注:アプリで相互通信用のブロードキャストを使用することが間違っている

このが間違っています。 内にブロードキャストを使用する理由はいくつかあります。アプリケーションがなくても本当に使えない場合もあります。

1

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

関連する問題