對於介面回撥的簡單理解
阿新 • • 發佈:2019-02-05
介面回撥在實際的應用中可以說是無處不在的,比方說你向伺服器請求一個數據,請求結束的時候你需要在介面上進行一個顯示,當然你可以選擇一直等待,但是這樣做效率實在是太低,並如果你在android 的Activity中等待的話很有可能會導致程式崩潰。這時候你就需要介面回調了。
下面就來簡單介紹一下介面回撥的簡單概念,
構成介面回撥有以下的幾個要素:
整個機制構成三要素就是:我(客戶端),你(服務端),約定(介面)
Java 中沒有函式指標這一說,因為java沒有指標,但是並不代表著它不會使用這個功能。事實上,引用就是實現了指標的功能。
回撥方法就是一個通過方法指標來呼叫的方法。如果我將這個方法的指標(地址,引用)通過形參傳遞到另一個類的某個方法裡,那麼當這個類呼叫該方法裡面我所傳入的指標時,就能呼叫我這邊的方法。
主要步驟:
* 定義介面 Callback ,包含回撥方法 callback();
* 服務端提供註冊的方法,並設定在某個條件下會回撥介面方法;
* 客戶端提供介面的實現方法,並註冊到服務端,把方法地址傳進去。
先來看一個最基本的回撥:
public class Me { public Me(You you) { // TODO Auto-generated constructor stub you.dosth(this,"整體公司檔案"); } public void doresult(String result) { System.out.println("事情"+result); } } public class You { public void dosth(Me me, String task) { // TODO Auto-generated method stub System.out.println("你要我做"+task); String result="做完,搞定"; me.doresult(result); } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub You you=new You(); new Me(you); } }
首先me類呼叫了you類中的dosth()方法,you類再在dosth()方法中回撥me類中的doresult()方法。
這時候如果除了me還有其他的人向你發出請求,那麼這時候就需要定義一個回撥介面,讓所有發出請求的類都實現這個介面。
public interface Bound { public void doresult(String s); } public class Me implements Bound { public Me(You you) { // TODO Auto-generated constructor stub you.dosth(this,"整體公司檔案"); } public void doresult(String result) { System.out.println("事情"+result); } } public class You { public void dosth(Bound me, String task) { // TODO Auto-generated method stub System.out.println("你要我做"+task); String result="做完,搞定"; me.doresult(result); } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub You you=new You(); new Me(you); } }
說到底回撥思想還是用到了java中多型的概念。