写给自己看的关于Java回调机制的blog
1:同步回调
类似于android 中的onClickListener ,例如:
定义一个回调接口
public interface OnClickListener {
public void onClick();
}
先自定义一个Button类,里面实现的逻辑大概是对点击状态的判断和点击事件的回调
再定义一个测试的Activity类 ,里面实现的逻辑是注册事件监听者,处理回调的点击事件和模仿用户点击了按钮
public class TestActivity {
public static void click(){
System.out.println("点击了按钮");
}
public static void main(String[] args) {
System.out.println("声明实例化一个 button 对象");
TestButton testBtn = new TestButton() ;
click();
System.out.println("注册事件监听者");
testBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick() {
System.out.println("点击事件处理");
}
});
}
}
运行则能知道同步回调的过程,Android 点击事件内不能进行耗时操作
2.异步回调
public void solveResult(String str);
}
Other other ;
public My(Other other ) {
this.other = other;
}
/**
* 发送消息通知其他人吃饭
*/
public void Call() {
System.out.println(" my -- > eatting");
new Thread(new Runnable() {
@Override
public void run() {
other.setCall(My.this,"eatting");
}
}).start();
System.out.println("my --> 我先做别的事情,可以了叫我");
}
@Override
public void solveResult(String string) {
System.out.println("solve --> "+string);
}
}
其他人类(class)
public class Other {
public Other () { }
public void accessMessage(){
//doWork ...
doWork();
notify();
//通知去吃饭
}
public void doWork() {
System.out.println("other --> do work");
}
public void setCall(CallBack callBack,String str)
{
if (str.equals("eatting")) {
System.out.println("other --> 等我做完事再通知你一起去吃饭");
String message = " other --> 可以去吃饭了";
callBack.solveResult(message);
}
}
}
测试用住方法
public class Main {
public static void main(String[] args) {
Other other = new Other();
My my = new My(other);
my.Call();
}
}
由此可见异步回调中可以进行耗时操作