85

コールバックの概念を理解したい。コールバックについてインターネットで検索しましたが、インターフェイスを使用した例がたくさんあり、あるクラスがそのインターフェイスを使用して別のクラスのメソッドを呼び出しています。しかし、まだコールバックの主な概念を理解できません。コールバックを使用する目的は何ですか?

4

6 に答える 6

180

これは、コールバックとユースケースをよく説明している素敵なチュートリアルです。

コールバックの概念は、別のクラスで何らかの作業が行われた場合にクラスに同期/非同期を通知することです。これをハリウッドの原則と呼ぶ人もいます。

次に例を示します。

class A implements ICallback {
     MyObject o;
     B b = new B(this, someParameter);

     @Override
     public void callback(MyObject o){
           this.o = o;
     }
}

class B {
     ICallback ic;
     B(ICallback ic, someParameter){
         this.ic = ic;
     }

    new Thread(new Runnable(){
         public void run(){
             // some calculation
             ic.callback(myObject)
         }
    }).start(); 
}

interface ICallback{
    public void callback(MyObject o);
}

クラス A はクラス B を呼び出して、スレッドで何らかの作業を完了させます。スレッドが作業を終了すると、コールバックを介してクラス A に通知し、結果を提供します。したがって、ポーリングなどの必要はありません。利用可能になるとすぐに結果が得られます。

Android コールバックでは、アクティビティとフラグメントの間で使用されます。Fragment はモジュール化する必要があるため、Fragment でコールバックを定義して Activity のメソッドを呼び出すことができます。

于 2013-08-05T09:34:33.500 に答える
9

コールバックは、Java で非常に役立ちます。

Callback を使用すると、成功またはエラーで完了した非同期アクションを別のクラスに通知できます。

于 2013-08-05T09:30:08.840 に答える
3

ここで以前に議論されました。

コンピューター プログラミングでは、コールバックは、他のコードに引数として渡される実行可能なコードの一部であり、都合のよいときに引数をコールバック (実行) することが期待されます。呼び出しは、同期コールバックのように即時に行われる場合もあれば、非同期コールバックのように後で行われる場合もあります。

于 2013-08-05T09:31:01.327 に答える
0

私は次の場合に使用しています: UI では、ボタンからアクションを取得しました。ユーザーは 500MB のファイルをダウンロードしたいと考えています。バックグラウンド エンジン (AsyncTask クラス) を初期化し、パラメーターを渡すことに感謝します。UI でブロック進行状況ダイアログを表示し、ユーザーが他のクリックを行うのを無効にします。問題は、いつ UI からブロックを削除するかということです。答えは、エンジンが成功または失敗で終了したときであり、それはコールバックまたは通知である可能性があります。

通知とコールバックの違いは別の質問ですが、1:1の方がコールバックが高速です。

于 2013-08-05T09:34:12.090 に答える