您的位置:首页 > 移动开发 > Android开发

Android之---回调机制(CallBack)

2017-01-13 18:02 423 查看

回调机制(CallBack)

简介

回调方法:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。

回调方法的实现过程就叫Android(Java)的回调机制。

原理

定义一个回调接口(CallBack)和一个回调函数 (call)

让类A实现这个回调接口和回调函数,在类A的构造中拿到类B的应用

在类B中声明一个带CallBack参数的方法(setCallBack(CallBack CallBack ……))

在类A中用类B的应用调用类B的方法setCallBack(),然后在setCallBack方法中用类A的对象(即CallBack回调接口的实现类)调用类A中的方法call(即回调函数)

异步实现案例

interface CallBack:

/**
* 这是一个回调接口
* @author xiaokele
*
*/
public interface CallBack {
/**
* 回调函数
* @param result
*/
public void call(String result);
}


class A:

/**
* @author xiaokele
* 实现了一个回调接口CallBack
*/
public class A implements CallBack {
/**
* 类B的引用
*/
private B b;

/**
* A的构造方法,持有B的引用
* @param B
*/
public A(B b){
this.b= b;
}

/**
* A通过这个方法去问B的问题
* @param question
*/
public void askQuestion(final String question){
//这里用一个线程就是异步,
new Thread(new Runnable() {
@Override
public void run() {
/**
* A调用B中的方法,在这里注册回调接口
* 这就相当于A类调用B的方法C
*/
b.setCallBack(A.this, question);
}
}).start();

//A问完问题就去干其他的事情了,诳街去了
play();
}

public void play(){
System.out.println("我要逛街去了");
}

/**
* B知道答案后调用此方法告诉A,就是所谓的A的回调方法
*/
@Override
public void call(String result) {
System.out.println("B告诉A的答案是--->" + result);
}
}


class B:

/**
* 类B
* @author xiaokele
*
*/
public class B{

/**
* @param callBack
* @param question  A问的问题
*/
public void setCallBack(CallBack callBack, String question){

System.out.println("A问的问题--->" + question);

//模拟B办自己的事情需要很长时间
for(int i=0; i<10000;i++){

}

/**
* B办完自己的事情之后想到了答案是2
*/
String result = "答案是2";

/**
* 于是就打电话告诉A,调用A中的方法
* 这就相当于B类反过来调用A的方法D
*/
callBack.call(result);
}
}


同步实现案例

同步实现类似上面的异步实现(去掉异步案例中类A中askQuestion方法中开线程和类B中setCallBack方法中办自己事情去了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息