您的位置:首页 > 编程语言 > Java开发

定义接口&监听回调

2016-08-02 13:01 204 查看
代码抽取是一个很好的变成习惯,一定要深刻理解。以一个监听器接口为例

1.抽取代码成方法

2.注释方法,申请监听监听器添加方法

3.监听器做参数传给工具 对象

4.听器内部获取参数

一定要养成 从底层到上层的习惯,而不是反之。

底层到上层一步步是怎么抽取的

从上层到底层:一步步是如何继 实现和复写的

java编程一定要养成抽取的习惯

http://blog.csdn.net/a78270528/article/details/46918601

回调机制

简单来说:回调函数就是预留给系统调用的函数,而且我们往往知道函数被调用的时机。

简单例子,考试答题第一件事就是写上学号和姓名。这里填写的学号和姓名不是自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统调用的),这其实就是一个回调的应用。老师提供接口(输入姓名 学号的规则),我们利用接口注册。

异步+回调的编程模式,按钮点击监听其实就是“回调”最常见的应用场景之一。我们不会显式的调用onclick方法。用户触发了该按钮的点击事件之后,会由Android系统自动调用。

activity的整个生命周期也是回调函数在发生作用。

举个例子:我打电话给你请教问题,你一时想不出解决方法,我又不能干等,于是我们呢约定:等你有了答案打手机通知我,过了xx分钟,我的手机响了,你说问题已经搞定,应该如此这般处理。

其中你后来打手机告诉我结果就是一个回调的的过程。我的手机号码必须在之前告诉你,这就是一个注册回调函数的过程。我的手机号码应该有效,并且能够接收你的呼叫,这是回调函数必须符合接口规范。



C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数(即注册)。r为注册函数。

简单来说:回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机,那我们继续完善下上面的那幅图。



public class You implements Runnable {

public void You(){

}

private String who;
private ContactInterface callback;
//调用此方法就表示有人联系你了,注册到你这来  即set方法就是图中的r方法
public void setCallback(String who,String question,ContactInterface callback) {
this.who=who;
this.callback = callback;
System.out.print("你说:当前联系我的人是"+who+",问题是:"+question);
}

//接口类,定义规范
public interface ContactInterface{
public void callBackByTel(String answer);
}

@Override
public void run() {
try {
Thread.sleep(1000);
handleThings();
} catch (InterruptedException e) {
e.printStackTrace();
}

}

private void handleThings() {
for(int i=0;i<100000;i++){
if(i == 0){
System.out.println("你正在思考问题.....");
}
}

String answer="答案是A";
System.out.print("你说:想到答案了,准备打回去给"+who+"告诉他答案");
//s回调c中的方法b
callback.callBackByTel(answer);

}
}


public class Me {
public static void main(String[] args){
Me me=new Me();
me.hasQuestion();
}

private void hasQuestion() {
You you = new You();
you.setCallback("蜗牛", "某道题答案是什么", new You.ContactInterface() {
@Override
//此即为回调函数
public void callBackByTel(String answer) {
System.out.print("我说:嗯,好的,我收到答案了"+answer+"谢谢你!");
}
});

new Thread(you).start();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐