2012-11-01 11 views

答えて

33

結果受信:

Generic interface for receiving a callback result from someone. 

放送受信機:

Base class for code that will receive intents sent by sendBroadcast(). 

EDIT:

背景:すべてのネットワークの操作は/長時間実行の操作が離れてメインスレッドから行われるべきです。これを行うには、2つの方法:

  1. 非同期タスク - 複雑な長時間実行されるバックグラウンド・プロセス

についてあなたが実行する必要がある場合 - のような単純なネットワーキングが DB処理

  • サービスを行う/画像を盗ん言うためにあなたのメインスレッドの外側で作業しますが、ユーザーがアプリケーションとやり取りしている間だけ、代わりにサービスではなく新しいスレッドを作成するべきでしょう。たとえば、アクティビティの実行中にのみ音楽を再生する場合は、非同期スレッドを作成します。しかし、あなたは、プロセスは、ユーザーがアプリ(例えばダウンロード)を終了した後も継続したい場合は、サービスを利用

    は、あなたが今

    1. あなたの活動は、あなたのサービスにWeb要求を送信します。2.を選ぶとしましょう
    2. あなたのサービスは、DefaultHttpClientと言ってこれを実行します。
    3. あなたの活動にデータを返します。ここでデータを受信する第三のステップは、2つの方法

    1で行うことができる

    )放送受信装置:複数の受信機がデータを受信することができます。送信されたシステム全体をブロードキャストで送信するたびに、アプリケーション間でデータ/通知を送信したい場合(たとえば、fbとtwitter、Webブロードキャストの複数の受信者と対話している場合)、

    2.)結果受信者:あなたのアプリケーションはデータの唯一の受信者です。それはあなたが実装し、それをputExtraを通してintentServiceに渡すインターフェースです。 IntentServiceはこのオブジェクト をフェッチし、そのreceive.send関数を呼び出して、何も(バンドル内に) 呼び出しアクティビティに送信します。あなたのすべての通信が アプリケーションへの内部

    EDITであれば、結果受信機は、放送受信機の上に 好みを持っている:私はまた、この注意を言及する必要があります

    注意:サービスは、メインスレッドで実行そのホストプロセスである サービスは独自のスレッドを作成せず、別途 プロセスで実行されません(特に指定しない限り)。つまり、 サービスがCPU集約的な作業またはブロック操作 (MP3再生やネットワーキングなど)を行う場合は、サービス内に新しいスレッド を作成してその作業を行う必要があります。別のスレッドを使用すると、 は、アプリケーションが応答しない(ANR)エラーのリスクを軽減し、アプリケーションのメインスレッドはアクティビティにユーザーの操作 専用に残ることがあります。

  • +0

    長時間実行されるネットワーキングプロセスに最適なのはどちらですか?例:ファイルのダウンロード、JSON parsing.etc – user1670564

    +0

    結果の受信者+サービスパターンを理解するには、ここで最上位の回答をご覧ください:http://stackoverflow.com/questions/3197335/restful-api-serviceそれはアプリケーションの本当に良いユースケースを与える – Slartibartfast

    +0

    返信ありがとう。私はリンクを通過しました。一度リンクを通過すると、私は両方の受信者に疑問がある。どちらのレシーバーも長時間の作業をサポートしています。どのような状況で私は放送と結果を使用する必要があります。 – user1670564

    3

    これらの2つのクラスは、完全にである。実際にはブロードキャストの結果と全く同じ違いです。

    • what it Broadcast?簡単な言葉で言えば、それはシステム全体に見える何らかのメッセージであり、システムのあらゆる部分(契約を知っている)によって消費される可能性があり、smb reuestによって生成されたものではありません。
    • 結果は何ですか?これは、システムの別の部分から受け取ることを期待しているものです。通常、結果の受信者は1つだけです。通常、受信者は結果を取得するための処理を要求しています(ブロードキャストの場合、誰も要求を出す必要はありません)。

    これはロジックの観点からの説明です。コードの観点から、BroadcastReceiverとResultReceiverを比較すれば、大きな違いが見られます。基本的に、両方のクラスはIPCの上に構築されていますが、BroadcastReceiverは異なる性質(これは最初の部分で説明しようとしました)のためにはるかに複雑です。

    +0

    両方の受信者が非同期HTTP要求と応答をサポートできる? – user1670564

    +0

    hm、どちらもHTTPリクエストではないので、いいえと思います。必要な場合は、サービスまたは非同期タスクから結果を送信することができます。しかし、AsyncTaskの場合は通常Handlerだけを使用できます。 – sandrstar

    8

    BroadcastReceiverは、ブロードキャストを受信する受信機です。それらは、(ラジオ放送のように)受信している受信者が多いという意図で誰かによって送信されます。

    一方、ResultReceiverは誰かからコールバックの結果を受け取ることを意図しています。だから、これは、あなたが誰かに電話をかけてから、あなたが電話した人の答え(結果)を受け取るための、トランシーバーのトーキーと比較することができます。

    +0

    返信ありがとう!いい例... – user1670564

    0

    放送受信

    放送受信機は、システム全体のブロードキャストアナウンスメントに応答する成分です。例えば、画面が消灯したこと、電池が残っていること、または画像が取り込まれたことを知らせる放送。アプリケーションは、ブロードキャストを開始することもできます。たとえば、一部のデータがデバイスにダウンロードされ、使用できるようになっていることを他のアプリケーションに知らせることができます。ブロードキャスト受信者はユーザーインターフェイスを表示しませんが、ブロードキャストイベントが発生したときにユーザーに警告するステータスバー通知を作成することがあります。しかし、放送受信機は他のコンポーネントの「ゲートウェイ」に過ぎず、非常に少ない作業量を実現することを意図しています。例えば、イベントに基づいて何らかの作業を実行するためのサービスを開始する場合があります。

    結果受信

    あなたのサービスがあなたのアプリケーションの一部であることを行っているなら、あなたはそれが必要以上にそれが道より複雑になっています。あなたはRestful Web Serviceからいくつかのデータを取得する簡単なユースケースを持っているので、ResultReceiverIntentServiceを調べるべきです。

    このService + ResultReceiverパターンは、何らかのアクションを実行するときにstartService()を使用してサービスを開始またはバインドすることによって機能します。インテント内のエクストラを介して、あなたのResultReceiver(アクティビティ)を実行して渡す操作を指定することができます。

    +0

    AsyncTaskの代わりに、このAsync Webサービス呼び出しを使用しますか? – user1670564

    +0

    Robby Pondからコピー&ペーストした単語には、おそらくクレジットを入れてください:http://stackoverflow.com/a/3197456/1738090 – w3bshark

    関連する問題