1、寫一個接口:
public interface CountInterface {
public void CountValue(String value);
}
2、寫一個Test類:
public class Test {
int countsum;
private CountInterface countcallback;
public void setCallBack(int x, int y, CountInterface countcallback) {
this.countcallback = countcallback;
countsum = x + y;
}
public void count() {
countcallback.CountValue(countsum + "");
}
}
3、MainActivity類onCreate()函數下:
Test test = new Test();
test.setCallBack(2, 5, new CountInterface() {
//回調函數
@Override
public void CountValue(String value) {
System.out.println("回調函數中的值:" + value );
}
});
//執行下面的代碼才會執行回調函數中的代碼
test.count();
了解:
1、回調函數就是一個通過函數指針來調用的函數。因為java沒辦法操作指針,于是它用接口來實作。
如果将函數A的指針(位址,引用)(CountValue函數)通過形參傳遞到另一個類(Test類)的某個函數裡,那麼當這個類(Test類)調用該函數裡面我所傳入的指針時,就能調用函數A。
2、實作了一個接口裡的方法CountValue,然後注冊到Test類,然後可以去做别的事情去了,Test類在某個觸發的時機(test.count();)回頭來調用CountValue的方法。
3、回調過程就是傳入函數A的位址,Test類接收,并在某個時刻回調這邊的A函數。
4、有些庫函數(library function)要求應用先傳給它一個函數,好在合适的時候調用,以完成目标任務。這個被傳入的、後又被調用的函數就稱為回調函數(callback function)。
5、以通知替代輪詢,回調函數CountValue()不用一直詢問是否需要執行,它隻需等待一個通知(回調)執行。