在學(xué)習(xí)Android的過程中,經(jīng)常會遇到"回調(diào)函數(shù)"這個詞,那么甚么是回調(diào)函數(shù)呢? 簡單地說,回調(diào)函數(shù)就是通過其指針來調(diào)用的函數(shù), 她不會被自己所在的對象調(diào)用, 只會在調(diào)用別人的方法的時候反過來被調(diào)用. 大家都知道,Android程序是通過java程序來實現(xiàn)的, java中是沒有指針的, 因此在實現(xiàn)回調(diào)時都是通過接口和抽象類.
回調(diào)的過程可以簡單的理解為,在A類中定義了一個方法,這個方法中用到了一個接口和該接口中的抽象方法,但是抽象方法 沒有具體的實現(xiàn), 需要B類去實現(xiàn). 當(dāng)B類實現(xiàn)該方法后, 它本身不會去調(diào)用這個方法. 而是傳遞給A類, 供A類去調(diào)用.這種機制就稱為回調(diào).
回調(diào)機制是將實現(xiàn)功能和定義分離的一種手段,市一中松耦合的設(shè)計思想. 接下來我們通過一段代碼進行分析,具體如下:
- (1).定義回調(diào)接口 ICallBack
//聲明一個接口
public interface ICallBack{
void postExec();
}
- (2).定義一個實現(xiàn)類 FooBar
public void class
{
private ICallBack callback;
public void setCallBack(ICallBack callBack){
this.callBack = callback;
}
public void doSth(){
callBack.postExec();
}
public static void main(String args[]){
FootBar foo = new FootBar();
foo.setCallBack(new ICallBack(){
public void postExec(){
Log.i("info","method executed!");
}
});
foo.doSth();
}
}
在上述代碼中, 第一段代碼定義了一個回調(diào)接口ICallBack, 該接口中有一個postExec()方法, 接受一個ICallBack參數(shù), 然后再doSth()方法中進行調(diào)用,這就是一個后回調(diào)函數(shù)的基本用法.
在Android開發(fā)中,會懂啊函數(shù)使用非常廣泛. 下面列舉兩個回調(diào)函數(shù)的使用場景, 讓大家更加直觀的看到回調(diào)函數(shù)是如何使用的.
應(yīng)用場景一,事件監(jiān)聽器的回調(diào)
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new Button.OnclickListener(){
//回調(diào)函數(shù)
@override
public void onClick(View view){
//doSomeThing...
}
});
上面的代碼給按鈕添加了一個事件監(jiān)聽器, 自己不會顯示的去調(diào)用onClick()方法; 用戶出發(fā)了該按鈕的點擊事件后,它會由Android系統(tǒng)來自動調(diào)用.
應(yīng)用場景二:Activity生命周期中的回調(diào)
@override
public void onCreate(Bundle saveInstanceState){
super.oncreate(saveInstanceState);
...
}
@override
public void onResume(){
super.onResume();
...
}
上面的代碼是創(chuàng)建Activity時, 系統(tǒng)自帶的onCreate()方法,該方法不會被認(rèn)為的調(diào)用, 但它會在Android系統(tǒng)進程中自動調(diào)用.
好了,這就是關(guān)于Android中回調(diào)函數(shù)的介紹,我這里廟小,裝不下大神,不喜勿噴哦!