2010-12-10 13 views

答えて

3

リスナータイプのようなものはありません。コールバックインターフェイスの命名規則です。したがって、同じスレッドでイベントを同期して処理したい場合にのみ使用します。

HandlerはAndroidクラスですが、メッセージやスレッドを処理する必要のあるスレッド(例:UIスレッド)にイベント(「ダウンロード完了」など)を渡すためにハンドルやハンドラを使用します。

+0

したがって、単純なスレッドアプリケーションでは、Listenerが優れたソリューションです。右? – user479211

+2

それは異なります。あなたのシンプルなアプリケーションは単一のスレッドを持つかもしれませんが、そのスレッドはUIを応答し続ける必要があります。これは、長い時間がかかるものでスレッドをブロックしないことによってのみ行うことができます。だから、あなたのイベント処理が小さくて簡単なものを含んでいる限り、コールバック(リスナー)を使ってください。大量の作業や待機が必要な場合は、別のスレッドを使用するか、Runnableに分割します。ハンドラを使用して、単一のUIスレッドでqueueすることができます。 –

7

これは良い質問です。

私は、Web通信に専用のハンドラを使用しています私のアプリで実行されているAndroidのバックグラウンドサービスを持っている

ハンドラを使用するためのシナリオ - 私は、ハンドラが要求をキューに入れ、それらを実行するので、このルートを行くことにしました1つずつ順番に並べ替えています。

たとえば、インスタントメッセンジャーアプリでは、チャットのシーケンスを維持することが望ましい場合があります。

コールバックを使用するシナリオマイバックグラウンドサービスはまた、(別のスレッドで)ハードウェアから読み込むクラスを使用

。いつでもデータが入る可能性があり、すぐに処理する必要があります。そのクラスでは、リスナー/コールバック・インターフェースを実装しました。


私の唯一の質問は、ハンドラのサイズに関するエチケットがあるかどうかです。 私は約50のユニークなメッセージを持っている:

  • 発信方向のWeb要求は、約25のメッセージ(各メッセージは、Webサーバー上の別のAPIである)
  • 各APIで構成され、したがって、他の25の着信ウェブがあります、応答を返す 応答

ハンドラは、サービスのコードの約60%を必要とします。これは、スイッチ(case {})構造(コードはほぼ1000行)が非常に大きくなることを想像してください。大きすぎる?それをどうやって分割するのですか?

関連する問題