コールバックの概念を理解したい。コールバックについてインターネットで検索しましたが、インターフェイスを使用した例がたくさんあり、あるクラスがそのインターフェイスを使用して別のクラスのメソッドを呼び出しています。しかし、まだコールバックの主な概念を理解できません。コールバックを使用する目的は何ですか?
6 に答える
これは、コールバックとユースケースをよく説明している素敵なチュートリアルです。
コールバックの概念は、別のクラスで何らかの作業が行われた場合にクラスに同期/非同期を通知することです。これをハリウッドの原則と呼ぶ人もいます。
次に例を示します。
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 のメソッドを呼び出すことができます。
コールバックは、Java で非常に役立ちます。
Callback を使用すると、成功またはエラーで完了した非同期アクションを別のクラスに通知できます。
ここで以前に議論されました。
コンピューター プログラミングでは、コールバックは、他のコードに引数として渡される実行可能なコードの一部であり、都合のよいときに引数をコールバック (実行) することが期待されます。呼び出しは、同期コールバックのように即時に行われる場合もあれば、非同期コールバックのように後で行われる場合もあります。
私は次の場合に使用しています: UI では、ボタンからアクションを取得しました。ユーザーは 500MB のファイルをダウンロードしたいと考えています。バックグラウンド エンジン (AsyncTask クラス) を初期化し、パラメーターを渡すことに感謝します。UI でブロック進行状況ダイアログを表示し、ユーザーが他のクリックを行うのを無効にします。問題は、いつ UI からブロックを削除するかということです。答えは、エンジンが成功または失敗で終了したときであり、それはコールバックまたは通知である可能性があります。
通知とコールバックの違いは別の質問ですが、1:1の方がコールバックが高速です。