Java回调机制分析
2016-07-28 13:33
399 查看
在安卓学习过程中经常听到回调函数,也经常用到回调函数,但只是有这个概念,并不清楚具体回调函数的运行机制。网上看了许多博客,大都采用代码分析。这里我们采用代码结合图例进行分析讲解。 先来看下回调的含义。就是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)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序