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