1. 程式人生 > >對Android 回撥機制的一些理解

對Android 回撥機制的一些理解

最近在弄關於Android 回撥的問題,對其做一下自己的理解。

一:什麼是Android的回撥?

       在A類中定義了一個方法,這個方法中用到了一個介面和該介面中的抽象方法,但是抽象方法沒有具體的實現,需要B類去實現,B類實現該方法後,它本身不會去呼叫該方法,而是傳遞給A類,供A類去呼叫,這種機制就稱為回撥。

二:關鍵程式碼

 (1) 我在MyButton類中宣告如下:

//1:宣告介面
public  interface OnClickListener{
      public  void onClick();
  }
//2:,宣告介面變數,
private OnClickListener  
mlistener; //3:建立方法呼叫介面 public void setOnClickListener(OnClickListener listener){ mlistener=listener; }
//4:通過變數呼叫抽象方法
  mlistener.onClick();
(2)在B類的程式碼如下
private MyButton myButton;       //這裡我是自定義的Button
myButton.setOnClickListener(new MyButton.OnClickListener() {    @Override
public void onClick() {
     System.
out.println("hello world");
}});
(3)再次理解回撥機制,為什麼說"需要B類去實現,B類實現該方法後,它本身不會去呼叫該方法,而是傳遞給A類,供A類去呼叫?"
   我們在A類中定義了一個介面,介面當中還含有一個抽象方法,這個抽象方法沒有具體的實現,當我需要時候自己去實現這個方法,比如這裡的B類,這句話可能難以理解:B類實現該方法後,它本身不會去呼叫該方法,而是傳遞給A類,供A類去呼叫,或許會認為,在B類的onClick()方法中我不是寫了具體的實現嘛,其實真的是這樣嗎?
來看一下相關原始碼。
由上圖可知Button是繼承View的,所以為了方便,我就在Android 的View類中檢視原始碼。
在View類中有setOnClickListener()方法,如圖:
以下兩圖是關鍵程式碼:
 先看下performClick()方法:
在父類中我們要用到onClick()方法,但是父類卻沒有去實現該方法,而是定義了一個方法setOnClickListener(OnClickListener l),如果子類想要自己能夠響應點選事件,則它就必須重寫父類的該方法,實現OnClickListener介面和它的onClick()方法。在子類實現該介面和方法後,將其通過引數傳遞給父類,在父類中執行onClick()方法。
再看OnTouchEvent()方法


由此可以看出在OnTouchEvent()方法中呼叫了performClick()方法,由此產生了回撥。
這就是我理解回撥的過程

相關推薦

Android 機制一些理解

最近在弄關於Android 回撥的問題,對其做一下自己的理解。 一:什麼是Android的回撥?        在A類中定義了一個方法,這個方法中用到了一個介面和該介面中的抽象方法,但是抽象方法沒有具體的實現,需要B類去實現,B類實現該方法後,它本身不會去呼叫該方法,而是

對於Android中介面機制理解

對於介面回撥機制首先要弄明白的問題是為什麼需要它,也就是介面回撥能為我們解決什麼問題: 在開發過程中我們經常會遇到一些有關觸發執行的問題,比如使用者觸發按鈕,然後程式就執行了一系列的操作的比如註冊登入啊;問題的核心在於為什麼是出發了按鈕才執行,不觸發就不執行嗎? 這個時候就能體現出各

Android 機制理解

以前不理解什麼叫回調,天天聽人家說加一個回撥方法啥的,心裡想我草,什麼叫回調方法啊?然後自己就在網上找啊找啊找,找了很多也不是很明白,現在知道了,所謂回撥:就是A類中呼叫B類中的某個方法C,然後B類中反過來呼叫A類中的方法D,D這個方法就叫回調方法,這樣子說你是不是有點暈暈的

理解Android機制

最近幾天,在看公司業務程式碼,最為一個小白,看到密密麻麻的大串程式碼,理解起來是特別吃力地,特別是中間做了一個小功能,涉及到了回撥,更是腦細胞消失無數。今天花了一個多小時時間,才弄懂回撥機制。下面說一下我的理解(其中的一種回撥方式): Public interf

android理解(一)

一 前言 從事開發n年了,對android回撥機制理解的還不是很透徹,我也是夠笨的,傷心!廢話不多說,現根據我自己的理解,來分析一下android回撥,大家一起來交流啊! 二 情景 雖然我很笨,但是本人

Android 函式的理解

一般我們在不同的應用傳遞資料,比較方便的是用廣播和回撥函式,當然還有其他方式,這裡學學回調函式的使用;  什麼是回撥函式呢?在C/C++中,因為我們有指標這個東西,所以傳遞資料什麼的,挺方便,把那個指標地址發過來,改一下地址裡面的值即可即可;但是Java中是沒有指標這個概念的

Android機制

Java模組與模組之間總是存在這一定的介面,從呼叫方式上看,可以分為三類:同步呼叫、回撥和非同步呼叫。同步呼叫是一種阻塞式呼叫,也是我們在寫程式中經常使用的;回撥是一種雙向的呼叫模式,也就是說,被呼

Java和Android機制

回撥介紹 所謂回撥,就是客戶程式Client呼叫服務程式Service中的某個方法A,然後Service又在某個時候反過來呼叫Client中的某個方法B,對於Client來說,這個B便叫做回撥函式。  回撥的如何實現的呢 Java的回撥是通過介面或者內部類來實

android機制的淺談

之前在其他語言看到函式指標的時候整個人都大為驚豔,怎麼可以這麼簡單.把方法作為一個引數傳遞到另一個方法然後在處理完邏輯之後直接呼叫這個方法來形成回撥。而可惜我大java竟然不支援。 又是一句how to play。 沒有函式指標沒關係,我們引入callbac

Android機制(java)

以前不理解什麼叫回調,天天聽人家說加一個回撥方法啥的,心裡想我草,什麼叫回調方法啊?然後自己就在網上找啊找啊找,找了很多也不是很明白,現在知道了,所謂回撥:就是A類中呼叫B類中的某個方法C,然後B類中反過來呼叫A類中的方法D,D這個方法就叫回調方法,回撥方式其實

Android機制簡單總結:Handler更新UI

為了滿足專案正常執行有些時候會使用到介面的回撥機制,因為之前在操作Fragment和Activity之間進行通訊時用到過介面的回撥機制,當時沒有總結的想法,現在又要使用時,發現已經存有模糊的記憶了,為了便於複習,再次稍作總結一下。 這裡的功能是通過handle

Android介面機制(有圖有真相,如果你一直接觸介面,但是自己又一直理解不了,這篇文章會讓你秒懂)

本人自己也經常在開發中遇到介面回撥機制,說來慚愧,雖然一直在用介面,但是隻是去複製別人的程式碼,一直弄不明白介面回撥的原理,甚至自己也努力去看了很多篇文章,幾乎看了所有的介面回撥的例子,什麼延時問答啊,孔融讓梨啊,都看了,例子都能背下來了,兩三個月了還沒理解。看來本人頭腦不

由淺入深理解Android中的機制

什麼是介面回撥?來先看看介面回撥的定義吧:可以把使用某一介面的類建立的物件的引用賦給該介面宣告的介面變數,那麼該介面變數就可以呼叫被類實現的介面的方法。什麼意思?反正我是沒看懂,哈哈(#黑線),這麼官方的話還是不要看的好,不如看一個具體的例子。 話說有一天,奧

關於ros多執行緒機制一些內容

Multithreading behaviour with ROS AsyncSpinner   I am trying to understand how the AsyncSpinner from ROS really works because I may have some

java機制用的理解與例項

生活場景如下: Wang寫數學題,有一道比較難,需要問Li,Li也不會,要先回家一趟問問老爸怎麼做,這個時候有wang如下三種選擇: 1)一直等待Li回來,期間啥也不幹同步方式 2) 等等再過來看Li回來沒,非同步future方式 3)wang把電話留下來,讓LI回來時打電話給自

js中函式的理解

一、什麼是回撥函式 一直接觸回撥函式這個名詞,但是不知道具體是幹什麼的,今天在百度上看到了一句話讓對回撥函式產生了一點興趣,那就是回撥函式的英文解釋: A callback is a function that is passed as an argument to an

一個經典例子讓你徹徹底底理解java機制

                以前不理解什麼叫回調,天天聽人家說加一個回撥方法啥的,心裡想我草,什麼叫回調方法啊?然後自己就在網上找啊找啊找,找了很多也不是很明白,現在知道了,所謂回撥:就是A類中呼叫B類中的某個方法C,然後B類中反過來呼叫A類中的方法D,D這個方法就叫回調方法,這樣子說你是不是有點暈暈的,

關於Java中函式的理解

先來看幾段程式: 1.  首先定義一個類Caller,這個類裡面儲存一個介面引用。        public class Caller {     private MyCallInter

Java基礎9——深入理解java機制

Java回撥機制 回撥的引入故事 轉載自Bro_超 // 同步回撥 1 public interface doJob 2 { 3 public void fillBlank(int a, int b, int result); 4 } 1 public class Su

詳解Android機制與RecyclerView的Item點選事件實現

總是看書上寫著回調回調,以為就是函式呼叫換了個名字,尤其是看了Button的點選事件實現後,覺得不就是觸發機制。 A事件發生->後臺處理邏輯->告訴前臺怎麼做->結束。 Android常見button點選事件: loginB