回調函數在Android監聽機制中的體現 – Android移動開發技術文章_手機開發 Android移動開發教學課程

今天想總結一下這一個月來學習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開發中頻繁使用,一定要深入理解。

 

本文出自 “曾經滄海難為水~” 博客

發佈留言