Android學習筆記之java中的回呼函數

來源:互聯網
上載者:User

在WINDOWS中,程式員想讓系統DLL調用自己編寫的一個方法,於是利用DLL當中回呼函數(CALLBACK)的介面來編寫程式,使它調用,這個就稱為回調。在調用介面時,需要嚴格的按照定義的參數和方法調用,並且需要處理函數的非同步,否則會導致程式的崩潰。這樣的解釋似乎還是比較難懂,這裡舉個簡單的例子,程式員A寫了一段程式(程式a),其中預留有回呼函數介面,並封裝好了該程式。程式員B要讓a調用自己的程式b中的一個方法,於是,他通過a中的介面回調自己b中的方法。目的達到。在C/C++中,要用回呼函數,被調函數需要告訴調用者自己的指標地址,但在JAVA中沒有指標,怎麼辦?我們可以通過介面(interface)來實現定義回呼函數。

假設我是程式員A,以下是我的程式a:

public class Caller {private MyCallInterface mc;public Caller() {}public void setMyCallInterface(MyCallInterface mc) {this.mc = mc;}public void call() {mc.fuc();}// Caller的調用方法}

這裡需要定義一個介面,以便程式員B根據我的定義編寫程式實現介面。

public interface MyCallInterface {public void fuc();}

於是,程式員B只需要實現這個介面就能達到回調的目的了:

public class Callee implements MyCallInterface {@Overridepublic void fuc() {System.out.println("我被Caller調用了!");}}

下面是調用過程:

public class Callbacks {public static void main(String[] args) {MyCallInterface callee = new Callee();Caller caller = new Caller();caller.setMyCallInterface(callee);caller.call();}}

在以上代碼中,caller是調用者,callee是被調用者,callbacks表示調用過程。

先產生了Callee對象,利用這個callee對象產生的Caller對象則攜帶了一些資訊(即與Callee對象的關聯),所以Caller對象可以利用自己的call方法調用Callee的方法。——這就是整個回調過程。

B產生A,則A具有調用B的方法的能力。caller中具有的介面引用很關鍵。實現了此介面引用的callee只需將自己的引用傳給Caller。

一般來說分為以下幾步:

  1.  聲明回呼函數的統一介面interface A,包含方法fuc();
  2.   在調用類caller內將該介面設定為私人成員private A XXX;
  3.   在caller內提供一個public方法,可以將外部“該介面A的實作類別的引用”通過形參傳給XXX;
  4.   caller的某個方法call()中會用到XXX.fuc()方法;
  5.   在caller的執行個體中,將實現了A介面的對象的引用傳給caller,後調用call()方法

本文來源。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.