回调是指一个组件内部呼叫外部的函数,一般有两种,一种是设置回调函数,另一种是继承这个组件(类),然后重写它的对应函数,好像Java所有函数都可以重写,换句话说,所有函数都是C++的虚函数。在Android上编程,感觉,重写on开头的函数是主要的回调方式,你要截获一些动作就必须自己写一个类,继承使用的组件,然后重写这些on函数。从机制上没有什么问题,除了我担心的开销问题,因为Java不得不维护一个巨大的调用关系,子类还有子类,父类还有父类,谁知道谁被重写了呢?都需要记录一下,而且即使一个空函数,也必须有代码,虽然它可能根本没有被调用。当然了,这一点和C++的虚函数机制是相同的,不过C++不是所有的函数都是虚函数。但是使用过程中很多时候,就为了截获一个消息,就不得不写上一大堆的重载函数,好像是必须的,而且必须实现一个继承类,无论从代码量还是视觉上,本来设置一个回调函数,一个语句的事情必须声明一个类,先不考虑执行效率,资源占用,但是阅读代码就很费劲,嵌套太多,缩进也太多,上下来回的拽滚动条,好吧,很多人还喜欢写注释,还喜欢空行。这样一行setOnClickListener函数代码,可能写成10行。而且重载的函数是在那个类里面的,不是在一个层级里面,好在Java运行调用它可见的任何变量(要加上final),要是C++的类,你还不能调内部声明类所在位置的父类的成员。总之,这种重载虚函数的回调机制实际上是非常别扭的方式,包括C++,我觉得虚函数除了增加了学习成本之外(虽然也不是很复杂),还有一大堆的问题。
解决方案 »
- 一个查询条件,求助!!!
- ssi整合问题 启动报错
- 存放到request里session的东西很快就没了?
- 数据库上的数据怎么样显示到页面上???
- 怎样取得本页面的hidden值
- 想学j2ee,大家给个参考
- 大家推荐一下判断两篇文章相似度方法?我尝试用lucene模糊搜索可以很好判断5、6个字的标题,但内容就不行了?有什么框架或方法可以实现?
- 求一个递归算法
- myeclipse4.1+eclipse3.1里添加hibernate工程出错!!!
- 如何连接sqlserver
- 将List<double>中的值取出来放到这个 double date[][]=new double[][]中
- 准备面试,各位推荐点面试资料吧!
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。
同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;
回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;
异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。
回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。貌似用的人不多,不太熟悉,你还得找找别的帖子