android中的回调简单认识
首先说一下最抽象的形式——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类的回调接口…
![](/assets/blank.gif)
C不会自己调用b,C提供b的目的就是让S来调用它,而且C不得不提供。S并不知道C提供的b是什么,因此S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数(即注册)。r为注册函数。
简单来说:
回调函数就是预留给系统调用的函数,而且我们往往知道该函数被调用的时机
详细的描述:
Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(newButton.OnClickListener() { //回调函数 @override publicvoidonClick(View v) { buttonTextView.setText("按钮被点击了"); } });
上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。
转载于:https://www.cnblogs.com/DonAndy/p/6143147.html
android中的回调简单认识相关推荐
- android中的回调
1.引子 android中的回调最经典的就是点击事件设置监听(一般通过switch(v.getId()))这里写个最主要的 btn_rigister.setOnClickListener(new Vi ...
- Android中socket通信简单实现
Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP. 先上个图: 这里以一个APP作为服务器跟客户端为示例 ...
- android中PAG的简单使用
(入门篇)android中PAG的简单使用 一.pag是什么? 示例:pag官网 二.使用步骤 1.引入库 代码如下(示例):在app文件夹下的build.gradle文件中,添加下面这条依赖,添加到 ...
- android什么是回调,Android中的回调是什么?
小编典典 回调的概念是在另一个类中完成某些工作时通知类同步/异步.有人称其为好莱坞原则:"不要叫我们,我们叫你". 这是一个例子: class A implements ICall ...
- android 张口逐帧动画,Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 实现 首先准备一组不同表情的照片,放在res/drawable下,然后在此目录下新建动画资源文件fairy.xml 这 ...
- Android中实现一个简单的逐帧动画(附代码下载)
场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
- Android中CardView的简单使用
Android 5.0的一个新增加的控件CardView. 环境配置 在Android Studio中进行使用,我们需要只需要在Gradle中添加CardView包的依赖即可进行使用. [html] ...
- Android多媒体学习一:Android中Image的简单实例。
在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解 ...
- android surface编程,Android中SurfaceView用法简单实例
本文实例讲述了Android中SurfaceView用法.分享给大家供大家参考,具体如下: 这里贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来 ...
- Android中实现一个简单的照相功能
一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片. 首先是布局文件: <?xml version="1.0" encoding="utf-8&q ...
最新文章
- 关于UNION联合体结构的运用
- 解决ftp限制用户访问上层目录后无法登陆问题
- Mybatis系列(三):Mybatis实现关联表查询
- 【Grafana】开启匿名登录(anonymous login)注意的地方
- 云原生 Serverless Database 使用体验
- 网易视频云:分布式转码服务高可用浅析
- MySql语句查询优化
- React 18 RC 版本发布啦,生产环境用起来!
- 前端学习(3170):react-hello-react之实现底部功能
- rust windows 交叉编译_树莓派上使用rust:交叉编译
- udp java 实例_udp例子,javaudp简单实例分享
- 百分比布局得应用 —— 模仿京东移动端首页
- hash和history路由的区别
- 测试知识 - 关于电脑
- CPU核心数目 与 多线程
- 私域增长 | 私域会员:9大连锁行业15个案例集锦
- 搭建一整套电销机器人系统需要哪些技术和资源
- java毕业设计二次元信息分享平台(附源码、数据库)
- 街机游戏linux模拟器_适用于Linux的5种街机风格游戏
- 秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?
热门文章
- Java程序员不容错过的开发趋势
- python编写的购物网站_写一个购物商城的实例教程
- Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
- (新手)使用pandas操作EXCEL
- [tldk][dpdk][dev] TLDK--基于dpdk的用户态协议栈传输层组件简单调研
- windows平台vs2010编译64位libiconv与libxml2
- 结对-四则运算答题器-开发环境搭建过程
- 操作系统-页式虚拟存储器管理系统设计
- python3--列表生成式
- 定位CoreLocation 使用