谈谈我对Java中CallBack的理解
CallBack是回調(diào)的意思,熟悉Windows編程的人對"回調(diào)函數(shù)"這四個字一定不會陌生,但是Java程序員對它可能就不太了解了。"回調(diào)函數(shù)"或者"回調(diào)方法"是軟件設(shè)計與開發(fā)中一個非常重要的概念,掌握"回調(diào)函數(shù)"的思想對程序員來說(不管用哪種語言)是非常必要的。
那么什么是回調(diào)函數(shù)呢?我認(rèn)為,回調(diào)函數(shù)就是預(yù)留給系統(tǒng)調(diào)用的函數(shù),而且我們往往知道該函數(shù)被調(diào)用的時機。這里有兩點需要注意:第一點,我們寫回調(diào)函數(shù)不是給自己調(diào)用的,而是準(zhǔn)備給系統(tǒng)在將來某一時刻調(diào)用的;第二點,我們應(yīng)該知道系統(tǒng)在什么情形下會調(diào)用我們寫的回調(diào)函數(shù)。
這里舉個現(xiàn)實生活中"回調(diào)函數(shù)"的例子來幫助大家更好的理解。我們平時考試答題的第一件事是干嘛?沒錯,是寫上學(xué)號和姓名。這里注意了,我們填寫學(xué)號和姓名不是給自己看的(即該方法不是給自己調(diào)用的),而是給老師登記分?jǐn)?shù)時看的(預(yù)留給系統(tǒng)將來調(diào)用),這其實就是一個回調(diào)的應(yīng)用。
下面再來看一下Android中應(yīng)用到"回調(diào)"的場景。
場景一:
Button button = (Button)this.findViewById(R.id.button);button.setOnClickListener(new Button.OnClickListener() {
//回調(diào)函數(shù)
@override
publicvoid onClick(View v) {
buttonTextView.setText("按鈕被點擊了");
}
});
上面的代碼給按鈕加了一個事件監(jiān)聽器,這其實就是"回調(diào)"最常見的應(yīng)用場景之一。我們自己不會顯示地去調(diào)用onClick方法。用戶觸發(fā)了該按鈕的點擊事件后,它會由Android系統(tǒng)來自動調(diào)用。
場景二:
@Overridepublicvoid onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
// You code...
}
@Override
publicvoid onResume() {
super.onResume();
// You code...
}
上面的方法大家就更熟悉了,這是Android系統(tǒng)在Activity類中設(shè)置的回調(diào)函數(shù),在Activity生命周期的不同階段,Android系統(tǒng)會自動調(diào)用相應(yīng)的方法(onCreate, onPause, onResume,onDestroy等等)
以上是兩個Android中用到"回調(diào)"的場景,他們的代碼實現(xiàn)可能不同,但是思想上是相近的,都是"回調(diào)"思想的體現(xiàn)。下面,我們在Java中分別模擬這兩個場景。
首先模擬注冊事件監(jiān)聽器。先寫一個監(jiān)聽器接口
package com.listener;/**
* 點擊監(jiān)聽器接口
* @author CodingMyWorld
*
*/
publicinterface MyOnClickListener {
publicvoid onClick();
}
然后寫一個我們自己的Button類
package com.listener;publicclass MyButton {
private MyOnClickListener listener;
/**
* 設(shè)置具體點擊監(jiān)聽器
* @param listener 點擊監(jiān)聽器實現(xiàn)類
*/
publicvoid setOnClickListener(MyOnClickListener listener) {
this.listener = listener;
}
/**
* 按鈕被點擊
*/
publicvoid doClick() {
listener.onClick();
}
}
最后模擬Client端的注冊監(jiān)聽器和觸發(fā)點擊操作。
package com.listener;publicclass Client {
publicstaticvoid main(String[] args) {
MyButton button =new MyButton();
//注冊監(jiān)聽器
button.setOnClickListener(new MyOnClickListener() {
@Override
publicvoid onClick() {
System.out.println("按鈕被點擊了");
}
});
//模擬用戶點擊
button.doClick();
}
}
以上就是"回調(diào)"思想在Java中事件監(jiān)聽的運用,我們再模擬第二個場景,"回調(diào)"在activity生命周期方法調(diào)用的體現(xiàn)。由于比較簡單,我就不多做解釋了,大家直接看代碼。
package com.activity;publicabstractclass Activity {
protectedvoid onCreate() {
System.out.println("創(chuàng)建準(zhǔn)備~~~~~~~");
}
protectedvoid onDestroy() {
System.out.println("銷毀準(zhǔn)備~~~~~~~~");
}
} package com.activity;
publicclass ConcreteActivity extends Activity {
@Override
protectedvoid onCreate() {
super.onCreate();
System.out.println("創(chuàng)建中!!!");
}
@Override
protectedvoid onDestroy() {
super.onDestroy();
System.out.println("銷毀中!!!");
}
} package com.activity;
publicclass Client {
publicstaticvoid main(String[] args) {
Activity activity =new ConcreteActivity();
activity.onCreate();
activity.onDestroy();
}
}
OK,我對CallBack的理解就談到這,有不對和能改進的地方也希望大家指正,多多交流。
轉(zhuǎn)載于:https://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html
總結(jié)
以上是生活随笔為你收集整理的谈谈我对Java中CallBack的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何促进泰山风景区与周边地区的合作发展?
- 下一篇: 让开发也懂前端