Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 異步回調機制

android 異步回調機制

編輯:關於Android編程

android事件處理:
基於監聽,基於回調。
基於監聽,是為android界面組件綁定特定的事件監聽器。主要處理一些特定的事件。
基於回調,時重寫android組件特定的回調方法,或者重寫activity的回調方法。android為絕大部分界面組件都提供了事件響應的回調方法。可以用於處理一些具有通用性的事件。

對於基於監聽的事件處理模型來說,事件源和事件監聽器是分離的,當事件源上發生特定事件之後,該事件交給事件監聽器負責處理,對於基於回調的事件處理模型來說,事件源和事件監聽器時統一的,當時間源發生特定事件之後,該事件還是有事件源本身負責處理。
例如:boolean onKeyMultiple(int keyCode,int repeateCount,KeyEvent event)用於響應按鍵重復點擊。官方API支出,它總是返回false,沒有handle,必須重寫才能實現。

委托機制需要事件源,事件和監聽。而回調機制難以理解,網上通俗的說法是:A類持有B類引用,A調用B的方法C,然後B類中反過來調用A類中的方法D,D就叫回調方法。其實D正是回調接口中的方法。

根據這種思路的理解,我寫了個簡單的示例,方便自己了解。

A有一個策劃方案,需要B去完成。B還有其他工作要做,只有做完了才能去做這個策劃方案。B完成策劃方案後,調用A的方法,把方案交給A。

A類:需要實現回調接口,並調用B的一個方法

public class A implements CallBack{
	/**
	 * A類持有B類的一個引用
	 */
	private B b;
	public A(B b){
		this.b=b;
	}
	/**
	 * 執行異步任務的方法
	 * @param ask
	 */
	
	public void ask(final String ask){
		//模擬異步任務,同時進行兩項任務
		new Thread(new Runnable() {

			@Override
			public void run() {
				//1   調用B類方法,完成獲取方案
				b.excuteMessage(A.this, ask);
				//2   執行其他任務
				task();
			}
		}).start();
	}
	/**
	 * 其他任務
	 */
	public void task(){
		System.out.println("---------");
	}

	/**
	 * 得到解決方案
	 * 回調方法
	 */
	@Override
	public void sovle(String result) {
		System.out.println(result);
	}
}

B類:被調用的方法需要帶有一個回調接口的參數,並調用A類的一個方法(回調方法)

public class B {

	/**
	 * 接口做參數的方法
	 * @param cb 回調接口
	 * @param ask 問題
	 */
	public void excuteMessage(CallBack cb,String ask){
		System.out.println("問題是:"+ask);
		//經過一段時間,方案已產生
		String result = "方案1";
		//B類中反過來調用A類中的方法
		cb.sovle(result);
	}
}

回調接口:

/**
 * 回調接口
 * @author DB
 *
 */
public interface CallBack {

	/**
	 * 回調方法
	 * @param result
	 */
	public void sovle(String result);
}

main:

public class Test {

	public static void main(String[] args) {
		B b = new B();//B類注冊回調方法
		A a = new A(b);//A類實現回調接口
		//A類引用調用自身方法
		a.ask("ask");
	}
}


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved