安卓回调详细解析
2016-04-15 13:42
316 查看
以前对于这个机制理解不够深刻,现在重新整理下思路。
一、建模
我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机回头来调用我doSomething的方法。好比,我给你打电话问某个难题,你电话里想不出来,于是说等想到了再回我电话。于是接口回调机制比喻模型如下
第一步:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ytfPyKOsxOPO0rXD1Ly2qKOs1eK49sq1z9a1xLe9t6jKx9Wm0fm1xKOsvdDKssO0w/vX1qOs0OjSqrSryOu0q7P2yrLDtKGjzqrKssO00qrV4tH5xNijv8TjztK1w9S8tqi157uwwarPtaOssrvKx86i0MW/27/boaPV4r7NysfUvLaotcS907/aoaM8L3A+CjxwPs7Sw8fUvLaotbHE48/rtb3OyszitcS08LC4vs272M7So6zL+dLU1eLA77SryOuyzsr9ysfE48/rtb21xLTwsLihozwvcD4KPHA+IDwvcD4KPHByZSBjbGFzcz0="brush:java;">public
interface ContactInterface { public void callBackByTel(String answer); }
第二步:
我得先打电话(注册)到你那,告诉你我的问题是什么。是吧。
所以你那里必须有个方法让我告诉你问题相关事宜(注册)。
?
第三步:
当你想到问题的答案后,打电话告诉我答案,即回调我传进来的方法。
?
OK, 整个机制构成三要素就是:我(客户端),你(服务端),约定(接口)
我类——
?
你类——
?
接口类——
?
验证结果:
二、总结
Java 中没有函数指针这一说,因为java没有指针,但是并不代表着它不会使用这个功能。事实上,引用就是实现了指针的功能。
回调方法就是一个通过方法指针来调用的方法。如果我将这个方法的指针(地址,引用)通过形参传递到另一个类的某个方法里,那么当这个类调用该方法里面我所传入的指针时,就能调用我这边的方法。
整个过程就是我传入方法A的地址,你接收,并在某个时刻回调我这边的A方法。
由于java没办法操作指针,于是它用接口来实现。
JAVA方法回调是一种耦合设计思想。作为一种架构,必须有自己的运行环境,并且提供用户的实现接口。
主要步骤如下:
定义接口 Callback ,包含回调方法 callback();
服务端提供注册的方法,并设定在某个条件下会回调接口方法;
客户端提供接口的实现方法,并注册到服务端,把方法地址传进去。
这样,在需要的时候,可用Caller对象的mCallback接口成员调用callback()方法,完成回调了。
三、Android中的回调机制
在android 中回调机制被大量使用。
比如,在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。或者更直接的是按键点击的实现方法。
?
明显,OnClickListener就是android 系统所约定好的接口,然后我们写的应用程序就是客户端,android 系统就是服务端。模型关系如下图所示:
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
转自http://www.2cto.com/kf/201412/365788.html
一、建模
我理解的接口回调就是,我这个类实现了一个接口里的方法doSomething,然后注册到你这里,然后我就去做别的事情去了,你在某个触发的时机回头来调用我doSomething的方法。好比,我给你打电话问某个难题,你电话里想不出来,于是说等想到了再回我电话。于是接口回调机制比喻模型如下
第一步:<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ytfPyKOsxOPO0rXD1Ly2qKOs1eK49sq1z9a1xLe9t6jKx9Wm0fm1xKOsvdDKssO0w/vX1qOs0OjSqrSryOu0q7P2yrLDtKGjzqrKssO00qrV4tH5xNijv8TjztK1w9S8tqi157uwwarPtaOssrvKx86i0MW/27/boaPV4r7NysfUvLaotcS907/aoaM8L3A+CjxwPs7Sw8fUvLaotbHE48/rtb3OyszitcS08LC4vs272M7So6zL+dLU1eLA77SryOuyzsr9ysfE48/rtb21xLTwsLihozwvcD4KPHA+IDwvcD4KPHByZSBjbGFzcz0="brush:java;">public
interface ContactInterface { public void callBackByTel(String answer); }
我得先打电话(注册)到你那,告诉你我的问题是什么。是吧。
所以你那里必须有个方法让我告诉你问题相关事宜(注册)。
?
当你想到问题的答案后,打电话告诉我答案,即回调我传进来的方法。
?
我类——
?
?
?
二、总结
Java 中没有函数指针这一说,因为java没有指针,但是并不代表着它不会使用这个功能。事实上,引用就是实现了指针的功能。
回调方法就是一个通过方法指针来调用的方法。如果我将这个方法的指针(地址,引用)通过形参传递到另一个类的某个方法里,那么当这个类调用该方法里面我所传入的指针时,就能调用我这边的方法。
整个过程就是我传入方法A的地址,你接收,并在某个时刻回调我这边的A方法。
由于java没办法操作指针,于是它用接口来实现。
JAVA方法回调是一种耦合设计思想。作为一种架构,必须有自己的运行环境,并且提供用户的实现接口。
主要步骤如下:
定义接口 Callback ,包含回调方法 callback();
服务端提供注册的方法,并设定在某个条件下会回调接口方法;
客户端提供接口的实现方法,并注册到服务端,把方法地址传进去。
这样,在需要的时候,可用Caller对象的mCallback接口成员调用callback()方法,完成回调了。
三、Android中的回调机制
在android 中回调机制被大量使用。
比如,在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。或者更直接的是按键点击的实现方法。
?
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
转自http://www.2cto.com/kf/201412/365788.html
相关文章推荐
- 浅谈Android应用保护(一):Android应用逆向的基本方法
- [BUG] Neutron创建虚拟路由器,端口状态为down,设置路由网关未生效
- Hough变换之直线检测
- linux删除主ip,从ip自动被删除
- Ubuntu下使用MTI(IMU)
- 一个简单的jsp+servlet实例,实现简单的登录
- 前景检测算法_1(codebook和平均背景法)
- 11111
- 姚帅推荐
- leetcode- Plus One
- COMDLL
- CDISC SDTM CM domain 学习笔记
- JSP页面实现servlet过滤器与servlet监听器(JSP中级技术)
- PHP 布尔假值情况
- ORACLE 闪回恢复区(Flashback recovery area)与undo tablespace
- 操作系统实验2-作业调度2.0
- java第五次作业
- leetCode(62)-Reverse Integer
- nfs限定挂载过来以后的用户为本地用户
- 标准OAM注册扩展OAM注册以及扩展OAM报文分析