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");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值