摘要:下面說的是接口回調的理解,比較常用什么是回調函數有些庫函數要求應用先傳給它一個函數,在合適的時候調用,以完成目標任務。
接口回調機制
java中的回調我認為分為,同步回調,異步回調1、什么是回調函數
回調:其實就是,A調用B,B也調用A,
同步回調:就是一種阻塞調用,A調用B的方法,等待B執行完,A才繼續
異步回調:類似打電話,A告訴B一聲,然后A,B 各自干各自的事情。
異步回調又可以是多線程,也可以是接口,我都按照異步來理解了。下面說的是接口回調的理解,比較常用
有些庫函數(library function)要求應用先傳給它一個函數,在合適的時候調用,以完成目標任務。這個被傳入的、后又被調用的函數就稱為回調函數(callback function)2、上面鏈接中例子的理解就是:我找你幫忙help做一件事,我把做完應該干啥的方法do()傳給你,,然后我調用請求你help()方法,告訴你開始做吧,然后你做了一堆,最后做完了應該怎么辦,就是調用do();
上文中的接口回調,理解為異步回調,就是我想完成一件事,我不用自己做,我告訴別人一下,讓他去做,我自己可以去做別的事。
約定接口,計算完要做的事----這里就是填寫結果,具體填寫誰的? 填什么?怎么填,都是傳過來的。。。 誰要找我幫忙,你得給我傳個你得權限和信息,比如(我幫你填寫結果,你告訴我怎么填,就是接口中這個方法,方法的具體實現規則是由 對方來完成)
public interface doJob { public void fillBlank(int a, int b, int result); }
計算方法,根據傳過來的值和對象,計算,計算完并根據約定,調用接口的方法做操作。
public class SuperCalculator { public void add(int a, int b, doJob customer) { int result = a + b; customer.fillBlank(a, b, result); } }
學生,找人幫忙計算,把數值 和 約定的實現方法傳過去,告訴他,這幾個數,你給我計算,計算完按照我的方法給我填了
public class Student { private String name = null; public Student(String name) { // TODO Auto-generated constructor stub this.name = name; } public void setName(String name) { this.name = name; } public class doHomeWork implements doJob { @Override public void fillBlank(int a, int b, int result) { // TODO Auto-generated method stub System.out.println(name + "求助小紅計算:" + a + " + " + b + " = " + result); } } public void callHelp (int a, int b) { new SuperCalculator().add(a, b, new doHomeWork()); } }
小販,找人幫忙,告訴你數值和,具體計算完應該怎么寫的方法,計算完按照這個方法幫我填了
public class Seller { private String name = null; public Seller(String name) { // TODO Auto-generated constructor stub this.name = name; } public void setName(String name) { this.name = name; } public class doHomeWork implements doJob { @Override public void fillBlank(int a, int b, int result) { // TODO Auto-generated method stub System.out.println(name + "求助小紅算賬:" + a + " + " + b + " = " + result + "元"); } } public void callHelp (int a, int b) { new SuperCalculator().add(a, b, new doHomeWork()); } }
public class Test { public static void main(String[] args) { int a = 56; int b = 31; int c = 26497; int d = 11256; Student s1 = new Student("小明"); Seller s2 = new Seller("老婆婆"); s1.callHelp(a, b); s2.callHelp(c, d); } }
所謂回調,就是a調b,b也會調a
最后的結果是: 學生給了你數值,和怎么填寫,,然后你計算完,用學生的對象調用了下方法,把數值傳進去,填寫。這是所謂的回調,具體我怎么填寫的,這個方法時學生是寫約定接口自己實現的,他傳過來了,告訴你了,所以調用方法以后,按照你傳入的數值做了回調,實現了學生約定的操作。
舉個例子:比如recyclerview 的點擊事件,,如果我想在外層做點擊事件,這個時候就必須拿到點擊的id.但是 recyclerview的點擊事件實在 adapter中實現的。。所以可以用接口回調來實現,把點擊位置回調返回,在外層做操作。。
但是我們可以這樣理解:我要在外層做點擊事件,但我做不了,怎么辦?我請求內層幫我做,我告訴他我點擊了要做啥就行了。這樣我屬于異步回調,我就是告訴你一聲,然后我就該干嘛干嘛去了。
1、請求幫助,需要一個幫助方法讓我來調用,我要傳值為(我要點擊后做的事,傳一個對象過去)
2、所以這就需要定義一個接口,約定好方法,然后再內層創建這個幫助方法
3、然后就是內層按照我的要求,去做相應的點擊事件了。
所以,接下來我們一步步的去實現:
1、約定一個接口(實現一個點擊方法,具體怎么實現由外層決定,完成后傳過來)
public interface onMyClick{ void setMyclick(int position); //有個位置參數,是因為外層實現這個方法規則的時候要用到 }
2、adapter中定義一個 設置監聽的方法讓外層調用
//聲明onMyclick對象是因為接下來,外層調用了這個方法我要用傳過來的onMyClick去做操作,去調用setMyclick(),來實現定義的具體操作 onMyClick onMyClick; public void setOnMyClick(onMyClick onMyClick){ this.onMyClick =onMyClick; }
3、外部調用監聽方法,傳入操作規則,也就是實現定義的接口方法的具體
adapter.setOnMyClick(new MyAdapter.onMyClick() { @Override public void setMyclick(int position) { Log.d("測試","接口回調"); } });
4、adapter內部點擊事件的監聽
holder.view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("測試","正常點擊事件"); if (onMyClick!=null){ onMyClick.setMyclick(position); } } });
注意:上面的順序是我按照理解的過程寫的,寫的時候順序不一定是這樣。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68729.html
摘要:異步調用異步調用是為了解決同步調用可能出現阻塞,導致整個流程卡住而產生的一種調用方式。回調是一種思想是一種機制,至于具體如何實現,如何通過代碼將回調實現得優雅實現得可擴展性比較高,一看開發者的個人水平,二看開發者對業務的理解程度。 模塊間調用在一個應用系統中,無論使用何種語言開發,必然存在模塊之間的調用,調用的方式分為幾種: (1)同步調用 showImg(https://segmen...
摘要:回調函數異步回調簡明講解敘言異步回調常用于某些業務需要很長時間處理,但是又需要立刻返回結果,這種情況都需要開辟線程獨立處理需要長時間多的業務,也無處理完了,回調回調函數,再去處理與之有關的需要在該業務之后處理的業務。 java回調函數-異步回調-簡明講解 敘言: 異步回調常用于某些業務需要很長時間處理,但是又需要立刻返回結果,這種情況都需要開辟線程獨立處理需要長時間多的業務,也無處理...
摘要:原文地址游客前言金三銀四,很多同學心里大概都準備著年后找工作或者跳槽。最近有很多同學都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數據結構為主,有一些中小型公司也會問到混合開發的知識,至于我為什么傾向于混合開發,我的一句話就是走上編程之路,將來你要學不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...
閱讀 3541·2021-11-18 10:02
閱讀 3110·2019-08-29 18:34
閱讀 3398·2019-08-29 17:00
閱讀 431·2019-08-29 12:35
閱讀 758·2019-08-28 18:22
閱讀 1934·2019-08-26 13:58
閱讀 1672·2019-08-26 10:39
閱讀 2678·2019-08-26 10:11