Android回调详解
很多时候开发遇到一些Ui更新 网络数据获取,或者方法方法传递的时候会借助回调函数,那么什么是回调函数 百度百科是这么解释的 转载请标注出处 http://blog.csdn.net/sk719887916/article/details/40543483
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
主页君:这只手在c函数里 在java里就抛弃了指针这些说法 只有引用地址一说
1机制编辑
意义编辑
所谓回调,就是客户程序Client调用服务程序sever中的某个函数A,然后sever又在某个时候反过来调用Client中的早就定义或者提供的函数B,对于sever来说,这个B()便叫做回调函数。一般说来,Client不会自己调用B,Client提供B的目的就是让sever来调用它。由于sever并不知道Client提供的B到底是啥东东,所以sever会约定B的接口规范(函数原型),然后由Client提前通过sever的一个函数R告诉sever自己将要使用B函数,这个过程称为回调函数的注册,R称为注册函数。Web Service以及Java的RMI都用到回调机制,可以访问远程服务器程序。
看了之后大家可能大概有点眉目 但是还是不是很清楚
但是安卓的回调和上诉描述有些许区别 最常见的就是安卓里面的点击事件 其实就是一个回调接口 ,他和代理有区别的。
我们下看下安卓 button的OnClickListener()源码
public void setOnClickListener(OnClickListener l) {mListViewListener = l;}public interface OnClickListener {public void onClick(View view);}
这段关键代码 可以看出 其实在view的OnClickListener就是一个接口对象 里面onClick(V)函数,我们再activity里其实就是去实现这个接口然后再去重写onClick()方法 这样其实我们activity就是在调用OnClickListener的方法 对于OnClickListener来说他是提供接口原型让activity去调用 其实就是在操作原型方法,到这里大家都该清楚了吧
就是以主页君的理解回调就是A埋了地雷 ,留了引线 有一天B踩上了 前提B并不知道有没有地雷 结果A被炸飞了 ,A其实本以为去伤害B 最后反倒伤害了自己。说到这里其实很多人认为进而代理相似 代理就是角色的反转 并不关心结果 同样A埋了雷 上去炸C 但是他没有引线 只有B有引线 他就让B做踩雷引线工作 ,结果C被炸了 ,做到了A炸C事情 同样C也可以通过B炸A。具体代理细节在此不描述 有兴趣的话去看下菜鸟哥的的一本书《大话设计模式》、。
那既然安卓已经定义了自带的回调 那么我们怎么有必要自己去写回调嘛 ?答案是必须的要自己写得
请看下面一个需求
比如有个需求是Listview里面有个点击事件需要操作activity里非listview里面的view 那么你肯定想 这么简单直接在activity去实现OnClickListener操作view. 但是有的时候我们需要adaper里面传值出来 或者直接让Adaper要实现某个方法, 但是只能activity才拥有这段方法的代码,这时候回调就来了 之前看过微信聊天的的部分源码 看到里面那就用到了回调
adapter
/*** * * @author skay*/public interface ReplayOnclickListener {public void onReplayClick(ReplyBean q, View v);public void onLongPressMine(ReplyBean q, View v);public void onLongPressOther(ReplyBean q, View v);public void onClickOtherView(ReplyBean q, View v);}
<span style="font-size:24px;">Activity</span>
public class chatlActivity extends BaseActivity implementsReplayOnclickListener{
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);adapter = new ChatlistAdapter(this);adapter.setReplayOnclickListener(this);//这是需要在adapter里面定义setReplayOnclickListener()方法 需要要执行者(chatlActivity )注入进去
}@Overridepublic void onReplayClick(Question q, View v) {ReplayPopupWindowUtil.getInstance().showShareAndStore(this, v);
//此方法是弹出复制PopupWindow的 }@Overridepublic void onLongPressMine(ReplyBean q, View v) {}@Overridepublic void onClickOtherView(ReplyBean q, View v) {
//这里你随便可以做操作 比如你调到另一页面然后再跳回来 或者你网络获取数据让这个函数调用也可以 只是一个简单的例子}
}
onReplayClick() 就是所谓的原型
Android回调详解相关推荐
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
- Android菜单详解——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- android WebView详解,常见漏洞详解和安全源码(上)
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...
- Android SharedFlow详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121911675 本文出自[赵彦军的博客] 文章目录 系列文章 什么是SharedF ...
- android打印intent flag,Android flag详解
Android flag详解 Android flag详解 一.Flag标志位 在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 如: 二.addFla ...
- android fragment 优势,Android Fragment详解
参考网址:Android Fragment详解 一.什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片.Fragment是依赖于Activity的,不能独立存在 ...
- Android NFC详解(高级)
上一章节讲到了 Android NFC的基本应用(Android NFC详解),这章延伸一下,介绍各种高级 NFC 应用,例如如何使用各种标签技术.如何写入 NFC 标签以及如何执行前台调度(借助前台 ...
- Android 动画详解-思维导图版
转载请注明链接: https://blog.csdn.net/feather_wch/article/details/81503233 涉及视图动画(补间动画.逐帧动画).属性动画三种动画的使用方法, ...
- Android冷启动详解
Android冷启动详解 冷启动: 热启动: APP冷启动详解 冷启动优化 本文主要讲Android app 冷.热启动流程,已经启动优化. 冷启动: 当应用启动时,后台没有该应用的进程,这时系统会重 ...
最新文章
- 报错解决:Liquid Warning: Liquid syntax error (line 2): Expected dotdot but found id in {{(site.github.p
- oracle 删掉虚拟目录,创建虚拟目录失败,必须为服务器名称指定“localhost”
- 内核模式下的注册表操作
- PHP函数处理方法总结
- 数据结构-荷兰国旗问题
- 求n个数的最大公因数和最小公倍数(c)
- 数据库设计的第三范式
- python办公自动化博客_自动化办公 Python 操控 Word
- linux单网卡多拨Adsl,ROS单线多拨pppoe
- linux内核镜像sd卡,【原创】Linux QT镜像的制作--制作SD卡启动盘
- 世界公认的第一商人——成就犹太商人的15个信条
- linux服务进程文件,[Linux实用命令]-6-服务与进程管理
- C内存分配方式与C++内存分配方式
- 深度思维(逻辑链的延长)
- Express 框架的使用(详细)
- intel服务器无线网卡,刷版本号?Intel再发新版无线网卡驱动
- Altium Designer18学习
- leveldb的sstable-ldb解析
- 详细理解安卓云信的接入及使用
- 如何用微信公众号快速注册小程序