今天想總結一下這一個月來學習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開發中頻繁使用,一定要深入理解。
本文出自 “曾經滄海難為水~” 博客