今天想總結一下這一個月來學習android的一些體會,其中體會最大的就是回呼函數在Android監聽機制中的表現。可以說android系統中的監聽無處不在~
一、回呼函數
~ 所謂回調,就是客戶程式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都用到回調機制,可以訪問遠程伺服器程式。
具體流程如下:
Java 中沒有指標的概念,通過介面和內部類的方式實現回調的功能:
1. 定義介面Callback ,包含回調方法callback()
2. 在一個類Caller 中聲明一個Callback介面對象mCallback
3. 在程式中賦予Caller對象的介面成員(mCallback) 一個內部類對象如
new Callback(){
callback(){
//函數的具體實現
}
這樣,在需要的時候,可用Caller對象的mCallback介面成員 調用callback()方法,完成回調.
二、執行個體
1、定義介面
public interface OnUpKeyLisnter{//定義一個借口,以便其他人根據我的定義編寫程式實現介面
public void OnUpkey();
}
2、定義服務函數
public class InterfaceServer implements OnUpKeyLisnter{
public OnUpKeyLisnter mOnUpKeyLisnter;
@Override
public void OnUpkey() {
// TODO Auto-generated method stub
if(mOnUpKeyLisnter != null){
mOnUpKeyLisnter.OnUpkey();
}
}
public void setOnUpKeyListener(OnUpKeyLisnter l){
this.mOnUpKeyLisnter = l;
}
}
3、定義客戶函數
public class InterfaceClient {
public static void main(String ...args){
InterfaceServer mServer = new InterfaceServer();
mServer.setOnUpKeyListener(new OnUpKeyLisnter() {
@Override
public void OnUpkey() {
// TODO Auto-generated method stub
System.out.println("哈哈哈~");
}
});
}
}
回呼函數在Android開發中頻繁使用,一定要深入理解。
本文出自 “曾經滄海難為水~” 部落格