定义接口&监听回调

代码抽取是一个很好的变成习惯,一定要深刻理解。以一个监听器接口为例
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();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值