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

在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 {
	@Override
	public 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()方法
本文來源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章