在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。在C/C++中,要用回调函数,被调函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
假设我是程序员A,以下是我的程序a:
public class Caller{
private MyCallInterface mc;
public Caller(){}

public setI(MyCallInterface mc){

this.mc=mc;

}

public call(){mc.fuc();}//Caller的调用方法
}

这里需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
public interface MyCallInterface{
public void fuc();
}

于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class?callee implements MyCallInterface{
public void fuc(){
//do something
}

}

下面是调用过程:

public class callbacks{
public static void main(String args[]){
Callee c1=new Callee();

Caller caller=new Caller();

caller.setI(c1);
caller.call();
}
}

在以上代码中,caller是调用者,callee是被调用者,callbacks表示调用过程。

先产生了Callee对象,利用这个callee对象产生的Caller对象则携带了一些信息(即与Callee对象的关联),所以Caller对象可以利用自己的call方法调用Callee的方法。——这就是整个回调过程。

B产生A,则A具有调用B的方法的能力。caller中具有的接口引用很关键。实现了此接口引用的callee只需将自己的引用传给Caller。

一般来说分为以下几步:

  1.  声明回调函数的统一接口interface A,包含方法fuc();
  2. 在调用类caller内将该接口设置为私有成员private A XXX;
  3. 在caller内提供一个public方法,可以将外部“该接口A的实现类的引用”通过形参传给XXX;
  4. caller的某个方法call()中会用到XXX.fuc()方法;
  5. 在caller的实例中,将实现了A接口的对象的引用传给caller,后调用call()方法

转载于:https://www.cnblogs.com/lingyun1120/archive/2011/09/30/2196225.html

Android学习笔记之java中的回调函数相关推荐

  1. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

  2. Java中的回调函数学习-深入浅出

    Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...

  3. 【theano-windows】学习笔记六——theano中的循环函数scan

    前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于 ...

  4. Android和Java中的回调函数

    在 Android 的学习过程中遇到了回调函数,经过一段时间的理解,将自己的收获整理如下,希望对迫切希望了解这方面知识的同学有所启发. 回调函数的理解如下: 在A类中定义了一个方法,这个方法中用到了一 ...

  5. cocos2d-x学习笔记 动作 CCCallFunc家族(回调函数包装器)

    CCCallFunc是CCActionInstant的子类,是非常重要的一个类族,就是适配器.用大白话说,就是做了一层包装,把函数包装成动作,这样你在执行动作的时候,就可以执行函数了.听起来很怪异吗? ...

  6. Android学习笔记之——手机中几种自带传感器的应用

    本博文学习一下Android中几种传感器的应用 目录 Android传感器 使用传感器步骤 Demo Test 查看手机支持哪些传感器 界面布局

  7. Android学习笔记--GMS认证中常见的fail项及解决方法

    ############################################################# cts测试的一些命令:     sudo chmod a+x copy_me ...

  8. 【学习笔记】Java中@Qualifier注解

    当使用@Autowired注解按照组件类型进行注入时,若存在多个相同类型的组件时,spring就不知道该注入哪个了.此时就可以在多个相同类型的组件上使用@Component("组件名&quo ...

  9. android学习笔记——viewPager(适配器、常用函数、监听器、切换动画)

    viewPager可以支持左右滑动 数据源->适配器->加载数据源 <android.support.v4.view.ViewPager> 一.配器有三种:   1.Pager ...

  10. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

最新文章

  1. thrift的中文编码处理
  2. mysql的1067启动错误的解决
  3. file_get_contents(php://input)的使用方法
  4. AOP—JVM SandBox—底层原理解析
  5. SAP One Order redesign里的新CDS view
  6. jquery--选择器sizzle源码分析
  7. SpringBoot中如何灵活的实现接口数据的加解密功能?
  8. 开发者调试工具Chrome Workspace
  9. ArcGIS AddIn 图斑比例分割工具,调用捕捉功能
  10. 剑指offer之数据流中的中位数
  11. 在Outlook 2013中发送给多个收件人时如何隐藏电子邮件地址
  12. Linux ftpget和ftpput命令
  13. python检测刀具_科研一角|Python语言在人工智能加工中心机器人方面的应用
  14. Encoded Strings I 模拟(2021.11.沈阳)
  15. Android service后台执行定时任务
  16. WPF路径绘图制作心形
  17. 《软技能 代码之外的生存指南》
  18. 计算机办公软件应用教学总结,2018年office办公软件教学总结(精选)
  19. 纯JS+HTML简单表格增删改查
  20. 《Android源代码设计模式解析与实战》读书笔记(十四)

热门文章

  1. 时间序列分析导论书摘:时间预处理-时序变换
  2. 实战build-react(二)-------引入Ant Design(增加)
  3. 学习日记12、list集合中根据某个字段进行去重复操作
  4. Java web ch02_3
  5. 《嵌入式Linux基础教程学习笔记一》
  6. git注意事项(持续更新中)
  7. Arduino入门笔记(5):1602液晶实验(实现时钟)
  8. Android 创建与解析XML(三)—— Sax方式
  9. [转]C#.NET中动态添加与删除控件
  10. 编程语言-Python2-问题整理