如何理解android的函数,通过Android源码理解回调函数
概述
我们先看一下维基百科对回调函数的定义:
在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。
举个栗子
我们看一下android中最经典的View.setOnClickListener()源码:
1.定义接口
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
2.注册回调函数
/**
* Register a callback to be invoked when this view is clicked. If this view is not
* clickable, it becomes clickable.
*
* @param l The callback that will run
*
* @see #setClickable(boolean)
*/
public void setOnClickListener(@Nullable OnClickListener l) {
if (!isClickable()) {
setClickable(true);
}
getListenerInfo().mOnClickListener = l;
}
3.执行回调函数
/**
* Call this view's OnClickListener, if it is defined. Performs all normal
* actions associated with clicking: reporting accessibility event, playing
* a sound, etc.
*
* @return True there was an assigned OnClickListener that was called, false
* otherwise is returned.
*/
public boolean performClick() {
final boolean result;
final ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);
li.mOnClickListener.onClick(this);
result = true;
} else {
result = false;
}
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
return result;
}
4.调用View的注册回调函数方法
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
}
});
ok了,这样就完成了一次完整的回调函数.
总结一下
首先,在MainActivity中通过View中的setOnclickListener方法的参数将OnClickListener 接口的实现者传给了View,最终在被点击时在performClick方法中,执行了实现者的onClick方法.
是不是就如维基百科上的回调定义:通过函数参数传递到其它代码的,某一块可执行代码的引用.O(∩_∩)O.
如何理解android的函数,通过Android源码理解回调函数相关推荐
- python中split函数源代码_Pandas.split()函数用法及源码
Pandas.split()函数用法及源码 发布时间:2018-05-08 10:44, 浏览次数:1092 , 标签: Pandas split Python数据分析博文汇总 * Pandas重复值 ...
- Android --- IjkPlayer 阅读native层源码之解码成功后的音频数据如何发送回Android播放(九)
整章目录:Android------- IjkPlayer 源码学习目录 本篇会有很多源代码,请注意阅读每行代码上面的注释. 本篇介绍的主要内容为上图红框圈起部分: 在前面介绍了如何将一个AvPack ...
- android SDK-25事件分发机制--源码正确解析
android SDK-25事件分发机制–源码正确解析 Android 事件分发分为View和ViewGroup的事件分发,ViewGroup比View过一个拦截判断,viewgroup可以拦截事件, ...
- Android ---- Ijkplayer阅读native层源码之IjkMediaPlayer_prepareAsync(五)
整章目录:Android------- IjkPlayer 源码学习目录 本篇会有很多源代码,请注意阅读每行代码上面的注释. 本篇介绍的主要内容为上图红框圈起部分: IjkMediaPlayer_pr ...
- Android Glide 3.7.0 源码解析(八) , RecyclableBufferedInputStream 的 mark/reset 实现
个人博客传送门 一.mark / reset 的作用 Android Glide 3.7.0 源码解析(七) , 细说图形变换和解码有提到过RecyclableBufferedInputStream ...
- Android中mesure过程详解 (结合Android 4.0.4 最新源码)
如何遍历并绘制View树?之前的文章Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)中提到invalidate()最后会发起一个View树遍历的请求,并通 ...
- Android中layout过程详解 (结合Android 4.0.4 最新源码)
上一篇文章Android中mesure过程详解 (结合Android 4.0.4 最新源码)介绍了View树的measure过程,相对与measure过程,本文介绍的layout过程要简单多了,正如l ...
- 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )
文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...
- Android多线程之IntentService源码解析
想要了解 IntentService 的工作原理需要先对 Android 系统中以 Handler.Looper.MessageQueue 组成的异步消息处理机制以及 HandlerThread 有所 ...
- Android磁盘管理-之vold源码分析(2)
作者:gzshun. 原创作品,转载请标明出处! Vold是Android系统处理磁盘的核心部分,取代了原来Linux系统中的udev,主要用来处理Android系统的热插拔存储设备.在Android ...
最新文章
- 清华大学梁宸计算机系,应用数学专业论文
- CentOS 7 安装 PostgreSQL 教程
- python2好还是python3好-Python 2 和 Python 3 有哪些主要区别?
- 前端HTML、JavaScript、CSS技术的日常记录
- Caused by: java.sql.SQLException: Column ‘某个字段‘ cannot be null
- 在发布ASP.NET网站的时候,出现state server错误
- 高精度地图的学习笔记
- 《计算机网络:自顶向下方法(原书第6版)》一2.7 TCP套接字编程
- Hive:用Java代码通过JDBC连接Hiveserver
- C语言记录元音字母的位置,求元音字母
- [转载]Web Frameworks for Python by Guido van Rossum
- foreman架构的引入4-安装Foreman1.6.3架构(foreman与puppetmaster分离)
- OracleLinux6的安装
- Aspose.word保存PDF时进行授权访问设置
- FOXIT PDF EDITOR工具分割PDF
- pano2vr怎么制作漫游_全景图如何制作?Pano2VR制作FLASH全景图图文教程(附Pano2VR下载)...
- 【JY】橡胶支座的简述和其力学性能计算
- 白天黑夜、中午和傍晚的固定配色绘画技巧
- ESP8266 WIFI探针
- HDOJ--1162--Eddy's picture
热门文章
- 基于TableStore/MaxCompute的数据采集分析系统介绍
- CSDN 十大技术主题盘点-云原生篇
- Gartner:云安全的未来——中国的安全访问服务边缘架构
- 4 年 46 个版本,一文读懂 Spring Cloud 发展历史
- 四大开源项目联合发布 腾讯已成Github全球贡献前十公司!
- Docker精华问答 | task与executor有什么关系?
- 自定义控件android.r,Android控件架构与自定义控件
- java 最大矩形_Java实现 LeetCode 85 最大矩形
- php url传递参数_互联网系统(APP、网站等)通信基石——会话(PHP版)
- ios弧形进度条_iOS如何实现环形进度条加载效果