1. 程式人生 > >Android回撥機制

Android回撥機制

Java模組與模組之間總是存在這一定的介面,從呼叫方式上看,可以分為三類:同步呼叫、回撥和非同步呼叫。同步呼叫是一種阻塞式呼叫,也是我們在寫程式中經常使用的;回撥是一種雙向的呼叫模式,也就是說,被呼叫的介面被呼叫時也會呼叫對方的介面;非同步呼叫是一種類似訊息或事件的機制,解決了同步阻塞的問題。回撥是非同步的基本,因此下面著重說回撥機制。


我理解的Android的回撥函式,在B類(通常為Service類 比較耗時的類中)中實現一個回撥函式(通常為一個介面),在A類(UI類)中有B類的一個CallBack介面。A類在一開始的時候主動註冊該回調函式(setCallBack())即將回調函式的例項化提交給呼叫者。當條件滿足時,呼叫者通過介面去呼叫回撥函式去進行事件的處理。例項化後再B類是使用該方法就是我傳入的指標,那麼也就是呼叫我傳入的資料

這也就解釋為什麼回撥機制是非同步。

總體來說三要素1、A類(UI類)2、B類(服務類)3、約定(介面)

!!!!下面很重要很精髓!!!!

回撥方法就是一個通過方法指標來呼叫的方法(介面)。如果我將這個方法的指標(地址,引用)通過形參傳遞到另一個類的某個方法裡(setCallBack註冊),那麼當這個類呼叫該方法裡面我所傳入的指標時,就能呼叫我這邊的方法。

整個過程就是我傳入方法A的地址,你接收,並在某個時刻回撥我這邊的A方法。由於java沒辦法操作指標,於是它用介面來實現。

JAVA方法回撥是一種耦合設計思想。作為一種架構,必須有自己的執行環境,並且提供使用者的實現介面。

主要步驟如下:

  • 1、定義介面 Callback ,包含回撥方法 callback();
  • 2、B類提供註冊的方法,並設定在某個條件下會回撥介面方法;
  • 3、A類提供介面的實現方法,並註冊到B類,把方法地址傳進去。
  • 這樣,在需要的時候,可用CamCallback介面成員呼叫callback()方法,完成回調了。

  • 具體實現程式碼:

  • public class BService {
        
    	private OnParserCallBack callBack;
        //B類中定義介面定義回撥方法
    	public interface OnParserCallBack {
    		public void OnParserComplete(List<HoursWeatherBean> list,
    				PMBean pmBean, WeatherBean weatherBean);
    	}
    	//註冊用於接收A類傳遞過來資料
    	public void setCallBack(OnParserCallBack callback) {
    		this.callBack = callback;
    	}
    	
    	public void removeCallback(){
    		callBack = null;
    	}
          
        //dosomething()
        public void getCityWeather() {
    		if(callBack!=null){
    		    //這裡使用的是A類傳遞的資料
    			callBack.OnParserComplete(list, pmBean, weatherBean);
    					
    	}
    
    }
    
    
    public class Amain{
         private BService mbService;
    	 //註冊
    	 mbService.setCallBack(new OnParserCallBack(){
    	    //回撥方法
    		public void OnParserComplete(List<HoursWeatherBean> list, PMBean pmBean,
    						WeatherBean weatherBean) {
    				//接收資料後開始用於顯示
    				setHourViews(list);
    				setPmViews(pmBean);
    				setWeather(weatherBean);
    		}
    	   });
    	 mbService.getCityWeather();
    }


相關推薦

Android機制

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

Android 機制理解

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

Android 機制的一些理解

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

Java和Android機制

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

android機制的淺談

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

我理解的Android機制

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

Android機制(java)

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

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

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

對於Android中介面機制的理解

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

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

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

弄明白Android 介面機制

以前對於這個機制理解不夠深刻,現在重新整理下思路。 一、建模 我理解的介面回撥就是,我這個類實現了一個接口裡的方法doSomething,然後註冊到你這裡,然後我就去做別的事情去了,你在某個觸發的時機回頭來呼叫我doSomething的方法。好比,我給你打電話問某個難題,你

Android 介面機制詳解

       在使用介面回撥的時候發現了一個經常犯的錯誤,就是回撥函式裡面的實現有可能是用多執行緒或者是非同步任務去做的,這就會導致我們期望函式回撥完畢去返回一個主函式的結果,實際發現是行不通的,因為

關於JAVA中的listener機制,以及其在Android中的使用

第一篇部落格,獻給我的舍友逼哥 @bigname22  部落格:http://my.csdn.net/bigname22 在學習Android的過程中接觸到了java的回撥機制,比如按鈕的監聽回撥,又比如開啟一個子執行緒,在子執行緒完成任務的時候通知主執行緒. 其實JA

android網路程式設計中使用java的機制

1) 先定義一個介面 public interface HttpCallbackListener { void onFinish(String response); void onError(Exception e); } 2) 在工具類HttpUtil中

Java機制Android中的應用

一、前言 1.回撥定義 就是A類中呼叫B類中的某個方法C,然後B類中反過來呼叫A類中的方法D,D這個方法就叫回調方法 2.經典的回撥方式: ● Class A實現介面CallBack callback——背景1 ● class A中包含一個

Android開發中Java機制的應用

  用Java寫了這麼久的程式,一直沒有理解什麼是回撥,在最近的Android開發工作中,一個偶然的需求讓我突然就對Java中的回撥有了一個理解,遂記錄之。   首先這個需求是這樣的,一個Activity中的有一個View,我需要在不同的觸發條件下更換這個View的Lay

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

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

由淺入深理解Android中的機制

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

android 非同步機制

android事件處理: 基於監聽,基於回撥。 基於監聽,是為android介面元件繫結特定的事件監聽器。主要處理一些特定的事件。 基於回撥,時重寫android元件特定的回撥方法,或者重寫activity的回撥方法。android為絕大部分介面元件都提供了事件響應的回撥方

Java機制(以Android事件監聽器為例)

Java的設計模式中有回撥這個機制,在Android開發中我們也會經常用到回撥機制。下面就通過一些小例子來說明什麼是回撥。 假如我們要實現這個這樣一個功能。 MainActivity中由一個Fragment和一個ViewPager構成,Fragment中有一系列按鈕,通過