Java回调机制分析

    在安卓学习过程中经常听到回调函数,也经常用到回调函数,但只是有这个概念,并不清楚具体回调函数的运行机制。网上看了许多博客,大都采用代码分析。这里我们采用代码结合图例进行分析讲解。

     先来看下回调的含义。就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。反正这说法我也看的模糊。

    那我们在来看个通俗点的说法。有一天老王遇到一个很难的问题,问题是“1 + 1 = ?”,就打电话问小李,小李一下子也不知道,就跟老王说,等我办完手上的事情,就去想想答案,老王也不会傻傻的拿着电话去等小李的答案吧,于是老王就对小李说,我还要去逛街,你知道了答案就打我电话告诉我,于是挂了电话,自己办自己的事情,过了一个小时,小李打了老王的电话,告诉他答案是2。
这个例子很形象的说明了回调的作用。那么我们结合代码来分析下回调的过程。

    我们先定义个接口。用于回调,用于答复问题。

public interface callback {
    public void reply(String str);
}
    老王要问小李个问题。

public class Wang implements callback{

    //老王要和小李联系,持有小李的对象.
    private Li li;

    public Wang(Li li) {
        this.li = li;
    }

    public void askQuestion(final String question){
        new Thread(){
            @Override
            public void run() {
                //注册回调接口(老王讲自身的接口和问题传入,等待答复)
                li.executeMessage(Wang.this, question); 
            }
        }.start();
    }

    @Override
    public void reply(String str) {
        //等待回复的结果.小李会利用这个方法来回复
        System.out.println(str);
    }

}
    小李利用接口回调回答老王问题。
public class Li {

    public void executeMessage(callback call,String  question){
        System.out.println(question);
        //根据老王传入的接口,调用老王的reply方法对老王的问题进行回复。
        call.reply("小李:老王你个逗逼1+1=2");
    }
}
    测试方法

public class Main {
    public static void main(String[] args) {
        Li li = new Li();
        Wang w = new Wang(li);
        w.askQuestion("老王:小李我问你个问题:1+1=?");
    }
}
    测试结果
老王:小李我问你个问题:1+1=?
小李:老王你个逗逼1+1=2

看完代码相信你应该已经明白了大半,如果还不明白我们在结合图例来进行分析一下。
这里写图片描述
看完这个图片相信你应该能明白这个整个的流程,老王和小李其实是借助这个接口进行通讯。
这篇文章参考了xiaanming的博客,对其进行了简化以方便初学者理解回调机制的流程。(http://blog.csdn.net/xiaanming/article/details/17483273

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章