调函数(callback Function),顾名思义,用于回调的函数。  回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。回调函数包含下面几个特性:

1、  属于工作流的一个部分;

2、  必须按照工作流指定的调用约定来申明(定义);

3、  他的调用时机由工作流决定,回调函数的实现者不能直接调用回调函数来实现工作流的功能;

当通常大家说的回调函数一般就是按照别人的定好的接口规范写的,等待别人调用的函数,在C语言中,回调函数通常通过函数指针来传递;在Java中,通常就是编写另外一个类或类库的人规定一个接口,然后你来实现这个接口,然后把这个实现类的一个对象作为参数传给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。

所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。

S类:                        c类

回调函数我的理解:S类写好了函数A,等待别人调用。这时候C类调用S类的A函数,同时在A函数里面要调用C类的B函数。这个称为回调。

我做过测试:

在C中:

S s = new S();

s.A();

B();

这样也能达到效果,但是之所以按照回调的方式,是因为如果调用S类的不是C,而是其他的D、E、F呢?

  1. 2.        回调机制

回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。

下面举个通俗的例子:

某天,我打电话向你请教问题,当然是个难题,:),你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。

这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

3、java回调机制:

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。

同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;

回      调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;

异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。

回调和异步调用的关系非常紧密:使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。

========================================================

4、回调的步骤

(1)声明一个接口

(2)另外一个类有方法里面有个参数以是这个接口类型的

(3)而后在另外类中实现这个接口(java中多用的 是匿名内部类),而且以这个匿名的类生成的对象为参数传到上面提到类中,而后实现回调.......

5、具体实现

(1)声明一个接口

package callbackexample;

public interface ICallBack {

//需要回调的方法

public void postExec();

}

(2)另外一个类有方法里面有个参数以是这个接口类型的

package callbackexample;

public class FooBar {

//组合聚合原则

private ICallBack callBack;

public void setCallBack(ICallBack callBack) {

this.callBack = callBack;

doSth();

}

public void doSth() {

callBack.postExec();

}

}

(3)而后在另外类中实现这个接口(java中多用的 是匿名内部类),而且以这个匿名的类生成的对象为参数传到上面提到类中,而后实现回调......

内部类

package callbackexample;

public class Test {

public static void main(String[] args) {

FooBar foo = new FooBar();

foo.setCallBack(new ICallBack() {

public void postExec() {

System.out.println("在Test类中实现但不能被Test的对象引用,而由FooBar对象调用");

}

});

}

}

6、说明

1.两个类:匿名类和FooBar

2.匿名类实现接口ICallBack(在test测试的main方法中用匿名类的形式实现)

3.FooBar 拥有一个参数为ICallBack接口类型的函数setCallBack(ICallBack   o)

4.匿名类运行时调用FooBar中setCallBack函数,以自身传入参数

5.FooBar已取得匿名类,就可以随时回调匿名类中所实现的ICallBack接口中的方法

==================================

7、其他说明

1。首先回调方法的概念与“构造方法”的概念是不一样的,它不是指java中某个具有特殊意义或用途的方法。

2。称它为方法的“回调”更恰当一些,它是指方法的一种调用方式。任何一个被“回调”的方法,皆可称之为“回调方法”

3。方法的回调通常发生在“java接口”和“抽象类”的使用过程中。

假设有接口名为 ICallBack 其中有方法名为postExec()

有 类Myclass 实现了该接口,也就是一定实现了postExec()这个方法。现在有另一个类FooBar它有个方法 setCallBack(ICallBack callBack) ,并且setCallBack方法调用了callBack的postExec()方法。

如果现在,我们使用一个Myclass 的实例myClass,将它作为参数带入到setCallBack(ICallBack callBack)方法中,我们就说setCallBack(ICallBack callBack)方法回调了myClass的postExec()方法。

==========================================================

参考:http://lavasoft.blog.51cto.com/62575/90453

android 回调的更多相关文章

  1. android 回调函数二:应用实例

    前言:如果对android回调的概念不明白的请看:android 回调函数一:基本概念 1.定义接口 package com.app.util; public interface ZYJCallBac ...

  2. android 回调函数一:基本概念

    1.概念 客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数. 一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C ...

  3. Android 回调接口是啥,回调机制详解(zhuan)

    回调函数http://blog.csdn.net/a78270528/article/details/46918601 Android框架 android frame work: http://blo ...

  4. 转一篇简易易懂的android回调的实现--->(转的)

    回调机制在 Android 监听用户界面操作中的体现   本文讨论以下两个内容: 1. 回调函数 2. 回调机制在 Android框架 监听用户界面操作中的作用 一 回调函数 回调函数就是一个通过函数 ...

  5. Android回调接口的写法

    方法一: 定义一个接口,里面写想要对外提供的方法,在逻辑层方法的参数里传递进去,让在需要的时候调接口里的方法. 实例一: public class SmsUtils { public interfac ...

  6. Android回调事件传播-android学习之旅(四十五)

    概念简介 代码演示 package peng.liu.test; import android.app.ActionBar; import android.app.Activity; import a ...

  7. Android回调详解

         很多时候开发遇到一些Ui更新 网络数据获取,或者方法方法传递的时候会借助回调函数,那么什么是回调函数 百度百科是这么解释的  转载请标注出处 http://blog.csdn.net/sk7 ...

  8. android回调函数

    在我们进行android开发的时候,常常遇到一些回调函数,当中,我们最常常使用的回调就是,当我们对一个组件设置监听的时候,事实上就相对于设置的回调函数.比如: Button btn = (Button ...

  9. Android 回调的理解,觉得写得好就转过来。。。收藏一下

    转自:一个经典例子让你彻彻底底理解java回调机制 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所 ...

  10. MTK Android 回调机制[CallBack]

    具体步骤: 一.建模 回调函数的关键是:将一段代码作为参数传递,而这段代码将会在某个时刻被执行 我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去 ...

随机推荐

  1. 数值分析1:三角函数的计算(C语言实现)

    之前学习C语言的时候,一直有个疑问,计算机从芯片设计的角度来看,只能计算常规的加减乘及移位之类的操作,那么对于像sin .cos这些三角函数,人脑尚无可以直接运算的法则,那么计算机是怎么实现的呢?最近 ...

  2. linux 和unix 的区别

    Linux与Unix的区别  某些PC机的Unix和Linux在实现方面相类似.几乎所有的商业Unix版本都基本支持同样的软件.程序设计环境和网络特性.然而,Linux和Unix的商业版本依然存在许多 ...

  3. Android UI ActionBar功能-自定义Tab功能

    还可以使用ActionBar实现Tab选项卡功能: 官方帮助文档:http://wear.techbrood.com/training/basics/actionbar/styling.html#Cu ...

  4. Android常用控件之GridView使用BaseAdapter

    我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...

  5. JAVA G1收集器 第11节

    JAVA G1收集器 第11节 上两章我们讲了新生代和年老代的收集器,那么这一章的话我们就要讲一个收集范围涵盖整个堆的收集器——G1收集器. 先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利 ...

  6. JAVA注释方式--目前用的

    代码整洁,规范,可读,注释是关键之一. 1.整个类文件注释 注释结构:/* * @(#){类名称}.java       {创建时间} * * {某人或某公司具有完全的版权} * {使用者必须经过许可 ...

  7. Window及document对象的区别

    一.Window对象 -------------------------------------------------- ------------------- 对象属性 window //窗户自身 ...

  8. python特性、属性以及私有化

    python中特性attribute 特性是对象内部的变量 对象的状态由它的特性来描述,对象的方法可以改变它的特性 可以直接从对象外部访问特性 特性示例: class Person: name = ' ...

  9. 第6章 堆排序,d叉堆,优先队列

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define leftChild(i) (2*(i ...

  10. [原创]抢先DriverStudio夺取机器控制权(上篇)

    原文链接:抢先DriverStudio夺取机器控制权 废话不谈,言归正传!大家都知道,装了DriverStudio软件(我使用的是v3.2版)的系统在启动时会显示其配置画面,(如图0所示) 图 0 这 ...