2013-08-05 28 views
53

我想了解回調的概念。我在互聯網上搜索了回調,並且有很多使用接口的例子,一個類正在使用該接口調用另一個類的方法。但是我仍然無法得到回調的主要概念,使用回調的目的是什麼?Android中的回調是什麼?

+0

鏈接:http://developer.android.com/guide/faq/commontasks.html#implementcallbacks –

+0

這是一種實現Java中的lambdas的方式,因爲它們在Java 8之前不受支持。 –

回答

121

這裏是一個很好的tutorial,它描述回調和使用情況良好。

回調的概念,是通知一類的同步/異步如果在其他類中的一些工作已經完成。有人稱之爲好萊塢原則:「不要給我們打電話,我們給你打電話」。

這裏有一個例子:

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回調中使用f.e.活動和片段之間。由於片段應該是模塊化的,你可以在片段中定義一個回調來調用活動中的方法。

+1

非常感謝,現在我有一個回調的想法 –

+0

非常感謝..這真的很簡單,很好的例子.... –

34

您先創建一個接口,然後定義一個方法,該方法將充當回調。在這個例子中,我們將有兩個班,一個CLASSA和另一CLASSB

接口:

public interface OnCustomEventListener{ 
    public void onEvent(); //method, which can have parameters 
} 

聽者本身CLASSB(我們只設置在CLASSB聽衆)

private OnCustomEventListener mListener; //listener field 

//setting the listener 
public void setCustomEventListener(OnCustomEventListener eventListener) { 
    this.mListener=eventListener; 
} 

在CLASSA,我們開始怎麼樣監聽任何CLASSB已經告訴

classB.setCustomEventListener(new OnCustomEventListener(){ 
    public void onEvent(){ 
     //do whatever you want to do when the event is performed. 
    } 
}); 

我們如何(在按下按鈕爲例)

if(this.mListener!=null){ 
    this.mListener.onEvent(); 
} 

附註:觸發來自CLASSB事件只要你想

Source

6

回調可以在Java中非常有幫助你定製的監聽器可能有多達參數。

使用回調,您可以通知已經成功或錯誤已完成的異步操作的另一個類。

2

有人here之前討論。

在計算機編程中,回調函數是一段可執行代碼,它作爲參數傳遞給其他代碼,期望在某個方便的時候回調(執行)參數。調用可以是在同步回調中​​立即執行的,也可以在稍後發生,如在異步回調中那樣。

1

我使用有如下情況: 在UI我從一個按鈕的操作,對於如。用戶想要下載一個500MB的文件。 謝謝我將初始化後臺引擎(AsyncTask類)並將參數傳遞給他。 在用戶界面上,我將顯示阻止進度對話框並禁止用戶進行任何其他點擊。問題是:何時從UI中刪除阻止?答案是:當引擎成功或失敗時,可以通過回調或通知。

是什麼通知和回調之間的差異是另一個問題,但1:1是更快的回調。

2

CallBack Interface用於FragmentFragment在android中的通信。

請參閱here以瞭解您的理解。