1. 程式人生 > >關於JAVA中的listener回撥機制,以及其在Android中的使用

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

第一篇部落格,獻給我的舍友逼哥 @bigname22 

部落格:http://my.csdn.net/bigname22

在學習Android的過程中接觸到了java的回撥機制,比如按鈕的監聽回撥,又比如開啟一個子執行緒,在子執行緒完成任務的時候通知主執行緒.

其實JAVA的回撥機制並不是非常高深的原理,不需要繼承什麼類.  只要有一點點介面interface和多執行緒Thread(只要瞭解就行)的知識,就能夠學得會.

首先,java中的回撥機制,是為了解決什麼問題呢?

我認為是為了實現兩個類之間的合作,和資訊傳遞.

其中一個是主類,負責呼叫另外一個被呼叫類, 而另外一個類在完成了工作之後,重新呼叫主類.

打個現實中的比方:我是總經理,我手頭上工作很多,突然我遇到一個比較耗費時間的問題,我當然不能自己解決.所以我打電話給了我一個員工,叫他去解決問題.並且告訴他我的電話一直開著,你解決的問題就馬上打回來給我.

這在JAVA中的實現:

其中A是總經理        B是員工

1 定義一個介面   2 A呼叫B的方法並在引數中傳入一個介面實現類例項   3 B中得到引數中的介面實現類例項,並執行完任務之後,呼叫介面實現類例項的方法.

這樣子說你可能就懵逼了.不過在下面程式碼中我們將一步一步慢慢解析:

首先定義一個介面:

public interface Listener {
	public void finish(int result);    //介面中唯一抽象函式,這裡加不加abstract無所謂
}


首先是總經理A

public class A {

	public void workOfA() {
		System.out.println("A遇到問題,趕緊開個了執行緒找B");
		new Thread(new Runnable() {					//首先,我們在A工作中遇到問題時,開啟了一個子執行緒
			@Override								//在子執行緒中我們建立了一個B例項,並呼叫了B的方法,並在引數中傳入了
			public void run() {						//一個通過匿名內部類實現Listener介面的例項
				// TODO Auto-generated method stub
				B b = new B();
				b.workOfB(1, 2, new Listener() { 	// 這裡建立一個匿名內部類實現了Listener介面,
													// 並且實現了Listener的方法,方法內容是
													// 當B完成任務之後 希望執行的程式碼.
					@Override
					public void finish(int result) {
						// TODO Auto-generated method stub
						resolve(result);
					}

				});
			}
		}).start();
	}

	public void resolve(int x) {
		System.out.println("A我知道答案了:" + x);
	}
}



然後是員工B
public class B {
	Listener listener;

	public void workOfB(int i, int j, Listener listener) {
		
		this.listener = listener;					//員工B首先要取得這個listener介面實現類
		
		try {
			for (int c = 1; c <= 5; c++) {
				Thread.sleep(1000);				//這裡執行緒休眠了一會,模擬B的工作是要時間的
				System.out.println("B思考了" + c + "秒");	
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
		int result = i + j;					//這是工作主體,計算了傳進來的i 和 j的和
		listener.finish(result);				//工作完成之後呢,呼叫介面中的方法,而方法主體記得嗎,就是在A中實現的方法.
									//這裡為什麼可以這麼做,我覺得算是JAVA中多型的一種體現,我只管呼叫這個抽象函式,
									//而抽象函式的具體實現,由A自己來定義
	}
}
最後是我們的測試環節,在主函式Main中測試
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new A();
		a.workOfA();
	}

}
<pre name="code" class="java">最終結果::
A遇到問題,趕緊開了個執行緒交給B
B思考了1秒
B思考了2秒
B思考了3秒
B思考了4秒
B思考了5秒
A我知道答案了:3




本人初學者,有什麼理解的不好的地方還望大神指出.

也希望更多的JAVA Android學習者一起交流.

相關推薦

關於JAVAlistener機制,及其Android的使用

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

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

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

深入理解Java機制(最通俗易懂的機制的部落格)

1. 什麼是回撥? 在我看來,回撥其實是一個相當具有迷惑性的名字,因為它很容易讓人糾結於回撥這個詞語本身的含義,從而忽略了回撥這種機制的本質。要理解Java中的回撥概念,最好的方式不是通過例項,而是從回撥概念的起源說起。   最開始接觸回撥時在C語言中函式指

夯實Java基礎系列11:深入理解Java機制

目錄 模組間的呼叫 多執行緒中的“回撥” Java回撥機制實戰 例項一 : 同步呼叫 例項二:由淺入深 例項三:Tom做題 參考文章

對於Android介面機制的理解

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

由淺入深理解Android機制

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

java的介面機制詳解

原文地址:http://www.open-open.com/lib/view/open1461482321288.html 序言 最近學習java,接觸到了回撥機制(CallBack)。初識時感覺比較混亂,而且在網上搜索到的相關的講解,要麼一言帶過,要麼說的比較

淺議Grpc傳輸機制和WCF機制的程式碼遷移

淺議Grpc傳輸機制和WCF中的回撥機制的程式碼遷移 一、引子 如您所知,gRPC是目前比較常見的rpc框架,可以方便的作為服務與服務之間的通訊基礎設施,為構建微服務體系提供非常強有力的支援。 而基於.NET Core的gRPC.NET 元件截至2019年11月30日的最新版本為2.25.0,該版本基於.ne

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的介面詳解,機制Activity和Adapter傳遞資料為例。

首先解決啥是回撥: 我覺得這個例子比較好:某天,我打電話向你請教問題,當然是個難題,你一時想不出解決方法,我又不能拿著電話在那裡傻等,於是我們約定:等你想出辦法後打手機通知我,這樣,我就掛掉電話辦其它事情去了。過了XX分鐘,我的手機響了,你興高采烈的說問題已經搞定,應該

java(callback)機制簡述

在java中,回撥用的十分頻繁;Android開發中,回撥往往出現在相機的預覽、採圖中,這裡我們來簡單地說明一下回調的實現原理; 回撥,顧名思義就是在呼叫之後返回呼叫。java回撥方法簡單的說就是:假設有兩個類class A和class B,在B中呼叫A類的一

RabbitMQ的訊息機制

最近在專案中需要用到RabbitMQ的訊息分發機制,Client端在傳送訊息給Server端處理之後還需要等待Server端的處理結果,開始很是困惑Server端如何將處理完成之後的結果再返回給相應傳送這個訊息的Client端,直到翻閱官方的資料才發現,Client端在傳送訊息的同時可以一併

java機制

簡單的解釋       你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的電話,過了幾天店裡有貨了,店員就打了你的電話,然後你接到電話後就到店裡去取了貨。在這個例子裡,你的電話號碼就叫回調函式,你把電話留給店員就叫登

java原理,以及Callable和FutureTask通過機制建立可監控的執行緒

回撥的概念會JS的人應該都能理解。 回撥分非同步回撥,同步回撥。但是同步回撥其實沒什麼意義。都同步了,那麼直接等那邊執行完了,這邊再執行就可以了,沒必要通過回撥。我們說的回撥主要是講非同步回撥。用於兩個執行緒甚至兩個系統之間互動呼叫。 例如我在A類的方法funa()中,要呼叫B類的方法fun

java機制詳解

原文出自這兒:https://blog.csdn.net/fengye454545/article/details/80198446   為了自己能夠加深理解自己動手敲了一遍,也寫寫,有時間看看。更詳細建議訪問原創博主。 ===========================

java機制用的理解與例項

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

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

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

深入淺出: Java機制(非同步)

Writer      :李強強 什麼是回撥?今天傻傻地截了張圖問了下,然後被陳大牛回答道“就一個回撥…”。此時千萬個草泥馬飛奔而過(逃 哈哈,看著原始碼,享受著這種回撥在程式碼上的作用,真是美哉。不妨總結總結。 一、什麼是回撥 回撥,回撥。要先有呼叫,才有呼叫者和被呼叫者之間的回撥。所以在百