首先说一下最抽象的形式——2个类,A类和B类。A类含有1个接口、1个接口变量、(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的“地方”;B类实现A中的接口,(可能)含有1个A类实例的引用,并且(可能用A类中为接口变量赋值的方法)将“自己”传递给A类的接口变量。

再将一个小故事:

我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名。这里注意了,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用),这其实就是一个回调的应用。老师提供接口(输入姓名,学号规则),我们利用接口注册。
看到上面的小故事,大家对回调就有了一些了解了,我们再回到开头的那个小故事。
那个故事说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范

首先是A类

public class A{...//1个接口变量private Callback mCallback;...//1个接口public interface Callback{void doSomething();}...//1个给接口变量赋值的方法public void setCallback(Callback callback){mCallback = callback;}...//1个使用接口变量的地方public void onExecute(){...mCallback.doSomething();...}...
}

然后是B类

public class B implements A.Callback{...//A类的实例的引用private A mAInstance;...//B类实现了A类的接口public void doSomething(){Log.d("TAG","will do something");}...//B类将自己(实际上是接口的实现)传给A类实例的接口变量mAInstance.setCallback(this);
}

下的几个点:

  • A类中有一个接口变量和接口。
  • B类实现A类的接口(这个接口就是所谓的回调接口)。
  • A类的接口变量会(通过过某种方法)获得靠B类实现的接口。
  • A类在一个适当的时机“使用”这个接口变量,即调用接口中的函数(这个函数就是所谓的回调函数)。

用生活中的事情打比方,其实很像是某人甲买杀手去杀死仇人= =,甲只是告诉杀手杀人这个目的,具体怎么杀死甲的仇人,由杀手去决定。这里甲是A类,杀手是B类,甲在某时刻告诉杀手杀人是A类调用回调接口里面的回调函数,杀手杀人的方法是B类实现A类的回调接口…

C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数(即注册)。r为注册函数。

简单来说:

回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机

详细的描述:

  

类似的小故事:
我们平时考试答题的第一件事是干嘛?没错,是写上学号和姓名。这里注意了,我们填写学号和姓名不是给自己看的(即该方法不是给自己调用的),而是给老师登记分数时看的(预留给系统将来调用),这其实就是一个回调的应用。老师提供接口(输入姓名,学号规则),我们利用接口注册。
看到上面的小故事,大家对回调就有了一些了解了,我们再回到开头的那个小故事。
那个故事说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。

好的,我们已经大概知道了回调的基本流程,下面,来看看Android中回调的基本使用。
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(newButton.OnClickListener() {  //回调函数
@override
publicvoidonClick(View v) {
buttonTextView.setText("按钮被点击了");
}
});  

上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。

参考自:http://blog.csdn.net/lindir/article/details/7819720,http://blog.csdn.net/chengkun_123/article/details/51318379

转载于:https://www.cnblogs.com/DonAndy/p/6143147.html

android中的回调简单认识相关推荐

  1. android中的回调

    1.引子 android中的回调最经典的就是点击事件设置监听(一般通过switch(v.getId()))这里写个最主要的 btn_rigister.setOnClickListener(new Vi ...

  2. Android中socket通信简单实现

    Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP. 先上个图: 这里以一个APP作为服务器跟客户端为示例 ...

  3. android中PAG的简单使用

    (入门篇)android中PAG的简单使用 一.pag是什么? 示例:pag官网 二.使用步骤 1.引入库 代码如下(示例):在app文件夹下的build.gradle文件中,添加下面这条依赖,添加到 ...

  4. android什么是回调,Android中的回调是什么?

    小编典典 回调的概念是在另一个类中完成某些工作时通知类同步/异步.有人称其为好莱坞原则:"不要叫我们,我们叫你". 这是一个例子: class A implements ICall ...

  5. android 张口逐帧动画,Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml 这 ...

  6. Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

  7. Android中CardView的简单使用

    Android 5.0的一个新增加的控件CardView. 环境配置 在Android Studio中进行使用,我们需要只需要在Gradle中添加CardView包的依赖即可进行使用. [html]  ...

  8. Android多媒体学习一:Android中Image的简单实例。

    在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解 ...

  9. android surface编程,Android中SurfaceView用法简单实例

    本文实例讲述了Android中SurfaceView用法.分享给大家供大家参考,具体如下: 这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来 ...

  10. Android中实现一个简单的照相功能

    一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片. 首先是布局文件: <?xml version="1.0" encoding="utf-8&q ...

最新文章

  1. 关于UNION联合体结构的运用
  2. 解决ftp限制用户访问上层目录后无法登陆问题
  3. Mybatis系列(三):Mybatis实现关联表查询
  4. 【Grafana】开启匿名登录(anonymous login)注意的地方
  5. 云原生 Serverless Database 使用体验
  6. 网易视频云:分布式转码服务高可用浅析
  7. MySql语句查询优化
  8. React 18 RC 版本发布啦,生产环境用起来!
  9. 前端学习(3170):react-hello-react之实现底部功能
  10. rust windows 交叉编译_树莓派上使用rust:交叉编译
  11. udp java 实例_udp例子,javaudp简单实例分享
  12. 百分比布局得应用 —— 模仿京东移动端首页
  13. hash和history路由的区别
  14. 测试知识 - 关于电脑
  15. CPU核心数目 与 多线程
  16. 私域增长 | 私域会员:9大连锁行业15个案例集锦
  17. 搭建一整套电销机器人系统需要哪些技术和资源
  18. java毕业设计二次元信息分享平台(附源码、数据库)
  19. 街机游戏linux模拟器_适用于Linux的5种街机风格游戏
  20. 秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?

热门文章

  1. Java程序员不容错过的开发趋势
  2. python编写的购物网站_写一个购物商城的实例教程
  3. Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
  4. (新手)使用pandas操作EXCEL
  5. [tldk][dpdk][dev] TLDK--基于dpdk的用户态协议栈传输层组件简单调研
  6. windows平台vs2010编译64位libiconv与libxml2
  7. 结对-四则运算答题器-开发环境搭建过程
  8. 操作系统-页式虚拟存储器管理系统设计
  9. python3--列表生成式
  10. 定位CoreLocation 使用