剛開始學習android,經常看到回調函數這個字眼,由於java學的不是太好,所以找了些資料,自己有些理解了,就拿出來和大家分享下。
所謂回調,就是客戶程序C調用服務程序S中的某個函數A,然后S又在某個時候反過來調用C中的某個函數B,對於C來說,這個B便叫做回調函數。例如Win32下的窗口過程函數就是一個典型的回調函數。一般說來,C不會自己調用B,C提供B的目的就是讓S來調用它,而且是C不得不提供。由於S並不知道C提供的B姓甚名誰,所以S會約定B的接口規范(函數原型),然后由C提前通過S的一個函數R告訴S自己將要使用B函數,這個過程稱為回調函數的注冊,R稱為注冊函數。Web Service以及Java的RMI都用到回調機制,可以訪問遠程服務器程序。(這段是網上抄的,摘自http://hi.baidu.com/f117_n/blog/item/2f52e612347cd3c8c3fd78ad.html)
重新舉個例子來理解回調:
我遇到了一個問題,便用家里的固話打給我的同事,他說不太清楚,稍后給我回復。我說我一會要出去,你想到了之后打我手機吧。沒過多久,我同事就打手機過來告訴了我答案。
下面是代碼:
1.先定義一個接口,規定回答問題的條件是打我手機
public interface CallBack {
//通過手機回答
void CallIphone();
}
2.調用者(我):
public class Me {
public void askQuestion(){
System.out.println("撥打固話問1+1=?");
}
}
3.被調用者(同事):
public class You {
public void answer(CallBack callBack){
//進行回調
callBack.CallIphone();
}
public static void main(String[] args) throws InterruptedException {
new Me().askQuestion();
Thread.sleep(3000);
new You().answer(new CallBack() {
//實現接口,即回答問題的方式
public void CallIphone() {
System.out.println("撥打手機回答等於2");
}
});
}
}
4.顯示結果
撥打固話問1+1=?
撥打手機回答等於2
代碼很簡單,理解也很膚淺,希望對大家有用。