2

リスナー、インターフェース、ハンドラー。

それらはすべて似ているように聞こえますが、異なるに違いありません。

たぶん、objective-c でも「デリゲート」します。

4

3 に答える 3

6

インターフェース:

interface役割を提供するために使用されます。デザイン パターンによると、変化し続ける特定の動作がある場合は、interfaceまたはでカプセル化する必要がありますabstract class

例えば:

paint classメソッドを持つthis があるとしpaintIt()ます。

現在、メソッドpaintIt()はフリーハンド、シェーディングなどにすることができるため、その種類の動作は変化し続けています. したがって、またはでカプセル化する 必要があります。interfaceabstract class

リスナー:

Listeners特定のアクションをリッスンするインターフェイスであり、特定のアクションが完了したときに起動されるロジックを持つコールバック メソッドが含まれています。

ハンドラ:

HandlersAndroid では、非 UI スレッドから UI スレッドにデータをポストするために使用されます。

于 2012-11-19T06:23:11.180 に答える
1

オーバーラップが非常に多く、特に Objective-C を参照しているため、これは注意が必要です。

これが私の最善の努力です:

リスナーは、インターフェースの一種です。

http://developer.android.com/guide/topics/ui/ui-events.html#EventListenersをご覧ください

そのページによると、「イベント」リスナーをユニークなものにしているのは、それが単一のコールバック インターフェイスであることです。そのページはビューに固有のものですが、もちろん、リスナーは他のタイプのイベントに適用できます。

android.os.Handler の Android ページは次のとおりです。 http://developer.android.com/reference/android/os/Handler.html

違いを非常に具体的に見ている場合、ハンドラーはより二重目的の概念であると言うのがおそらく妥当です。ハンドラーは、メッセージ/イベントの送信と、後で受信することで構成されます。

野球?
フィールドにいるプレーヤーは、ボールの聞き役です。プレーヤーの手にある手袋 (弱い類推) がインターフェイスです。楽しみのために空中でボールをトスし、それをキャッチするプレーヤーがハンドラーです。
:)

Objective-C の場合: インターフェイスの使用法はほとんど同じですが、名前が異なります: @protocol

Android/Java の Objective-C へのリスナーは、Java/Android のリスナーのように、さまざまな方法で実装されています。Obj-C で最も優れているのは、通知 (NSNotification および NSNotificationCenter) です。これは反論できるかもしれません。

コーディングの仕方はもちろん様々ですし、パターンも様々です。Android の Handler は、Obj-C メッセージで引数として渡されるブロックと同等であると見なすことができます。または、デリゲートも適合します。

于 2012-11-19T06:36:50.637 に答える
1

リスナーは、ドット ネットのデリゲートとほぼ同様の種類であり、Objective C である可能性があります。その主な用途は、何らかのアクションまたはイベントが実行されたときにコールバック メソッドを保持することです。dotnetの場合はメソッド自体をコールバックとしてデリゲートに渡していますが(おそらくObjective Cでも同様でしょう)、Javaではデリゲートのような概念がありません。したがって、インターフェイスを使用して同じトリックを実行しています。

たとえば、ボタン クリックをメソッドに割り当てる必要がある場合、dotnet およびおそらくオブジェクティブ C では、その関数ポインターを対応するクリック デリゲートに渡します。Java では、次のようなインターフェイスを作成します。

public interface ButtonClickListener{
    void onClick();
}

次に、ボタン クラス内で、デリゲートの代わりに、このリスナーを受け入れる関数を作成します。

public void setOnClickListener(ButtonClickListener listener){
    mButtonClickListener=listener;
}

実装されsetOnClickListenerたクラスのオブジェクトを使用して、クラスでこのメソッドを呼び出します。ButtonClickListener

次に、ボタンのクリックが発生するたびに、ボタン クラスが行うことは次のとおりです。

mButtonClickListener.onClick();

これにより、実装されたクラスの onClick が呼び出され、ButtonClickListenerそこで必要な操作を実行できます。

Handler はこれとは関係ありません。これは、他のカスタム スレッドを操作しているときに操作を UI スレッドと同期するための Android フレームワーク提供のクラスです。

あなたがアイデアを得たことを願っています!!。

于 2012-11-19T06:27:51.470 に答える