回调机制详解

什么是函数回调?如何使用函数回调机制? 函数回调是一种将函数作为参数传递给另一个函数,并在后者内部执行的机制。简而言之,它允许你动态地决定在什么时候调用哪个函数。事件处理:当特定事件发生时,调用相应的回调函数来处理事件。排序和过滤:在排序或过滤数据时,将自定义比较函数传递给排序或过滤函数。执行特定操作:根据条件执行不同的操作,而不需要大量的条件语句。然后,你需要定义一个函数指针,用于存储回调函数的地址。函数指针的类型必须与回调函数的原型匹配。这个函数指针callback可以存储一个接受两个指向常量数据的指针并返回整数的函数的地址。 阅读详情

很喜欢这个博主的文章!

转!!!

尊重原创转载请注明:From AigeStudio(http://blog.youkuaiyun.com/aigestudio)Power by Aige 侵权必究!

原帖地址:http://blog.youkuaiyun.com/aigestudio/article/details/40869893

当时我思考了下就让他在异步完成后回调一下将值返回……因为对方是初学者我就给他简单解释了下Android的回调……说了一下午他都没弄明白……原因不是我讲得不够详细而是他陷进了他异步的问题……他把他那个问题和我讲的回调混在了一起……一直跳不出那个思维,其实回调机制很好理解,也基于这个原因,也算为了这位仁兄,我决定用最直白的语言来给大家讲讲Android的回调机制是怎么个回事,阅读这篇文章你不需要太高深的技术功底,只要你会点JAVA基本的知识,知道什么叫类什么叫接口怎么创建项目,我想相信你看完本章后必定会有收获。

废话不多说,像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号码叫你如果事情办完了你就打电话告诉他一声;这是一个现实生活中常能碰到的例子,我们用呢就用代码的方式来实现一个这个过程,看一下这个过程究竟是怎样的。

首先在Eclipse中新建一个Java项目:CallBackDemoInJava;

然后再新建三个类:Manager(该类用来模拟总经理)、Personnel(该类用来模拟员工)、Main(主类);


Manager的代码如下:

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. /** 
  4.  * @description 该类用来模拟总经理 
  5.  * @author Aige 
  6.  * @since 2014/11/6 
  7.  */  
  8. public class Manager {  
  9.     /** 
  10.      * @param personnel 
  11.      *            传入一个员工类的对象 
  12.      */  
  13.     public Manager(Personnel personnel) {  
  14.   
  15.         // 想让该让员工做什么  
  16.         personnel.doSomething(this, "整理公司文件");  
  17.     }  
  18.   
  19.     /** 
  20.      * @description 当员工做完总经理让他做的事后就通过该方法通知总经理 
  21.      * @param result 
  22.      *            事情结果 
  23.      */  
  24.     public void phoneCall(String result) {  
  25.         System.out.println("事情" + result);  
  26.     }  
  27. }  
Manager类是个模拟总经理的类,当该类的对象被造出来后就会通过Personnel的对象去执行Personnel中的doSomething方法告诉员工做些什么

Personnel的代码如下:

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. /** 
  4.  * @description 该类用来模拟员工 
  5.  * @author Aige 
  6.  * @since 2014/11/6 
  7.  */  
  8. public class Personnel {  
  9.     public void doSomething(Manager manager, String task) {  
  10.   
  11.         // 总经理通过doSomething方法告诉员工要做什么  
  12.         System.out.println("总经理要你做" + task);  
  13.   
  14.         String result = "做完了";  
  15.   
  16.         // 当事情做完了我们就通过总经理公布的phoneCall方法通知总经理结果  
  17.         manager.phoneCall(result);  
  18.     }  
  19. }  
总经理通过调用Personnel中的doSomething方法告诉员工该做些什么,当员工做完后就通过Manager中的phoneCall方法通知总经理结果

那么好的!万事俱备,我们在Main中测试运行下代码看看结果:

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. public class Main {  
  4.     public static void main(String[] args) {  
  5.         // 首先我们需要一个员工  
  6.         Personnel personnel = new Personnel();  
  7.   
  8.         // 其次把这个员工指派给总经理  
  9.         new Manager(personnel);  
  10.     }  
  11. }  

代码执行结果如下:


回到我们刚才举的那个现实中的例子:总经理出差前要你去办件事情,这件事情通过doSomething告诉你了,事情要是办完了就打总经理的电话phoneCall通知他一声。这里的phoneCall我们就称为回调方法,为什么称之为回调呢?你问我我也不清楚哈~这你得问Sun公司了,不过我们从代码的执行过程可以看出数据的流向大致是Manager—–>Personnel—–>Manager,这不就是一个“回调”的过程么?现在我们来总结下满足回调的两个基本条件:

1.Class A调用Class B中的X方法

2.ClassB中X方法执行的过程中调用Class A中的Y方法完成回调

一切看上去都很完美~以上例子代码简单通俗地描述了回调,但是这里我就会有这样一个疑问:假设总经理出差前交了件事情给我去办,不巧……副总经理也要给我件事去办,更无耻的是……主管也发任务过来了,都要求说做完就打电话通知他们……这时我们就要定义更多类,什么总经理类啦~经理类啦~主管类啦~杂七杂八的类,但是这些杂七杂八的大爷们都要求做完事情就电话通知,每个类都会有一个类似phoneCall的方法作为回调方法,这时,我们利用面向对象的思想来看~是不是可以把这个回调方法抽象出来作为一个独立的抽象类或接口呢?多态的思想油然而生~~~鉴于JAVA接口的好处,我们就定义一个名为CallBack的接口作为回调接口,再在该接口下定义一个名为backResult的抽象方法作为回调方法,让那些总经理类啦~经理类啦~主管类啦~什么的都去实现该接口,这时候我们就来改造下我们的项目:



CallBack代码如下:

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. /** 
  4.  * @description 回调接口 
  5.  * @author Aige 
  6.  * @since 2014/11/6 
  7.  */  
  8. public interface CallBack {  
  9.   
  10.     // 回调方法  
  11.     public void backResult(String result);  
  12. }  

Manager代码改造后如下:

实现CallBack接口重写backResult方法

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. /** 
  4.  * @description 该类用来模拟总经理 
  5.  * @author Aige 
  6.  * @since 2014/11/6 
  7.  */  
  8. public class Manager implements CallBack {  
  9.     /** 
  10.      * @param personnel 
  11.      *            传入一个员工类的对象 
  12.      */  
  13.     public Manager(Personnel personnel) {  
  14.   
  15.         // 想让该让员工做什么  
  16.         personnel.doSomething(this, "整理公司文件");  
  17.     }  
  18.   
  19.     /** 
  20.      * @description 当员工做完总经理让他做的事后就通过该方法通知总经理 
  21.      * @param result 
  22.      *            事情结果 
  23.      */  
  24.     public void backResult(String result) {  
  25.         System.out.println("事情" + result);  
  26.     }  
  27. }  

Personnel代码改造后如下:

doSomething方法不再传入一个Manager对象而是一个CallBack接口:

[java]  view plain copy print ?
  1. package com.aige.test;  
  2.   
  3. /** 
  4.  * @description 该类用来模拟员工 
  5.  * @author Aige 
  6.  * @since 2014/11/6 
  7.  */  
  8. public class Personnel {  
  9.     public void doSomething(CallBack callBack, String task) {  
  10.         // 总经理通过doSomething方法告诉员工要做什么  
  11.         System.out.println("总经理要你做" + task);  
  12.   
  13.         String result = "做完了";  
  14.   
  15.         // 当事情做完了我们就通过总经理公布的phoneCall方法通知总经理结果  
  16.         callBack.backResult(result);  
  17.     }  
  18. }  
Main代码不变,执行结果也是一样的。

至此,回调的基本概念差不多就是这样了~其实回调真心不难理解,但是回调在Android中相当重要,几乎处处可见回调机制,如果你能理解到回调的奥秘~我相信对你的Android技术是一个不小的提升~~吃药去了!



个人总结一下:

安卓中到处都是回调,了解回调机制非常重要!

实现回调的两个条件,类 A中类B中的X方法

                                  类B中X方法在执行的时候调用类A的方法

  然后利用多态的思想,将doSomething方法传入的为callback的接口.任何实现这个接口的类都可以传入.

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复 本文深入分析Windows系统下pip install SSLError与SSL模块缺失的根本原因,提供系统级修复方案。从Python安装包缺失SSL支持、OpenSSL库冲突到环境变量配置问题,详细讲解四大成因及对应的解决方案,包括重新安装Python、手动修复OpenSSL依赖等实用技巧,帮助开发者彻底解决HTTPS连接问题。 阅读详情

相关推荐

VUE3如何使得大屏自适应的几种方法?

16:9。

weixin_42711805的博客 1万+

1.1 回调机制(Call back)

一门编程语言,使得下层模块/库可以调用(或执行)上层模块定义的代码的机制,即为回调(call back,一个动词词组)机制。而上层模块所定义的、被(下层模块)调用的代码,则被称为回调函数 (简称回调、callback,一个名词)。

yqj2065的博客 1万+

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

回调机制

介绍了回调的作用机制和 C/C++ 下常用的形式

ZachZheng的专栏 2215

别再手动配网了!用安信可PB-02模组+PHY Mesh App,5分钟搞定蓝牙Mesh智能灯群控

本文详细介绍了如何使用安信可PB-02模组和PHY Mesh App快速搭建蓝牙Mesh智能灯群控系统。通过5分钟的硬件连接和固件烧录,用户可实现多灯分组控制、场景切换及地理围栏等高级功能,显著提升智能家居部署效率。方案特别适合需要快速实现灯光群控的场景。

weixin_28675839的博客 416

Tessy单元测试软件安装与破解避坑指南(附个人使用路径设置详解)

本文详细介绍了Tessy单元测试软件的安装与配置全流程,包括系统需求、服务器连接设置、环境变量配置等关键步骤,帮助开发者避开常见陷阱。特别提供了个人使用路径设置详解,确保Tessy在嵌入式开发环境中高效运行,适用于汽车电子、工业控制等领域。

weixin_33709364的博客 344

一. 异步消息的传递-回调机制

1. 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方

hlfkyo的专栏 868

【JavaSE】之流程控制与方法

Java基础之Java流程控制与方法相关知识介绍~

小新要变强的博客 5795

函数回调机制、异步函数回调机制图例详解

无论是JS的函数回调还是Java回调机制,它们思想都是类似的,简单来说就是,如下图所示:                                在层次一中的方法一(函数)调用层次二中的方法,而这个被调用的方法又会调用层次一中的方法,这个最后被调用的方法二就是回调方法。方法三调用方法二就是回调的过程。 在Java中,这个“层次”可以理解为类,是两个类互相调用对方的方法;也可以理解为应用

Leeon的博客 2万+

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

视觉媒体通信作业记录(六)端到端的视频传输系统

将采集、编码、传输、显示各模块连接起来,形成一个端到端的视频通信系统,开发一个特色模块,将其加入系统;

weixin_45774698的博客 1967

java回调机制详解

回调介绍所谓回调,就是客户程序Client调用服务程序Service中的某个方法A,然后Service又在某个时候反过来调用Client中的某个方法B,对于Client来说,这个B便叫做回调函数。 回调的如何实现的呢java的回调是通过接口或者内部类来实现的。JAVA方法回调是功能定义和功能实现分享的一种手段,是一种耦合设计思想。作为一种架构,必须有自己的运行环境,并且提供用户的实现接口。代码案例

Aluo 2987

手把手教你学pcie--(PCIe) 写请求的流程

通过上述流程,我们可以看到PCIe写请求的完整过程,包括请求的构建、发送、接收、处理和响应。这种请求-响应模型确保了数据传输的可靠性和有序性。

MHD0815的博客 158

Java 回调机制详解

说明最近在写代码,发现 java 回调机制蛮实用。在网上搜索部分资料以后,现在按照自己的理解进行归纳总结 ,有理解错的地方,希望大家能够帮忙指正! 先从一个很简单的 Android 开发例子说起。我们在界面上使用 Button 时,为其增加点击事件监听大概需要以下几个步骤 : ① 实例化 Button 对象,如 btn_call_back; ② btn_call_back.setOnClic

li_cs的博客 229

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java回调机制_Java回调机制详解

曾经自己偶尔听说过回调机制,隐隐约约能够懂一些意思,但是当让自己写一个简单的示例程序时,自己就傻眼了。随着工作经验的增加,自己经常听到这儿使用了回调,那儿使用了回调,自己是时候好好研究一下Java回调机制了。网上关于Java回调的文章一抓一大把,但是看完总是云里雾里,不知所云,特别是看到抓取别人的代码走两步时,总是现眼。于是自己决定写一篇关于Java机制的文章,以方便大家和自己更深入的学习Java...

weixin_31083103的博客 303

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 回调接口是啥,回调机制详解

首先解决啥是回调: 举个例子:某天,我打电话向你请教问题,当然是个难题,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。 C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b

二一点 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java回调机制详解

java回调机制: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。   同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用; 回      调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口; 异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种

809

回调监听机制详解

一、回调机制的理解 回调监听实例需求:领导需要员工帮忙做一件事情,做完以后告诉他。这件事情的执行,是需要消耗时间的,领导不能在这里等待着。所以需要,在事情执行完后给领导一个反馈。 在编码实现中,耗时操作则需要回调监听。 领导:需要一个做事的员工,安排任务,携带回传信息途径 ---- 员工,任务,回传途径; 员工:做事情,回传消息 ---- 需要:事情,回传;输出:事情结果。

未来~超越自己 4451

Java 消息机制之回调详解

Java 中的回调机制是一个比较常见的机制,只是有可能在你的程序中使用得比较少,在一些大型的框架中回调机制随处可见。而在之前的博文《Java设计模式——观察者模式》及 Android 中对 ListView 的相关操作也有回调身影。本文就通过一些具体的实例,慢慢走近 Java 的回调机制。

大鱼 9055

回调机制java_java-回调机制详解

转:http://blog.youkuaiyun.com/llayjun/article/details/50454148阅读目录一、前言二、回调的含义和用途三、Java实现接口回调四、Android中的接口回调五、参考资料一、前言最近在看android fragment与Activity进行数据传递的部分,看到了接口回调的内容,今天来总结一下。二、回调的含义和用途1、什么是回调?一般来说,模块之间都存在一定...

weixin_39915081的博客 113

JAVA回调机制(CallBack)详解

序言 最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教! 开始之前,先想...

weixin_30793643的博客 6065
上一篇: 设计模式之状态模式
下一篇: Git的使用-把本地代码上传到github的库中
Leafact
博客等级 码龄14年 20粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值