首先说一下最抽象的形式——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

android中的回调简单认识的更多相关文章

  1. Android零基础入门第35节:Android中基于回调的事件处理

    原文:Android零基础入门第35节:Android中基于回调的事件处理 通过前面两期掌握了Android中基于监听的事件处理的五种形式,那么本期一起来学习Android中基于回调的事件处理. 一. ...

  2. [原创]Android中LocationManager的简单使用,获取当前位置

    Android中LocationManager的提供了一系列方法来地理位置相关的问题,包括查询上一个已知位置:注册/注销来自某个 LocationProvider的周期性的位置更新:以及注册/注销接近 ...

  3. android中的回调

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

  4. Android中ProgressDialog的简单示例

    网上一般对进度条的示例都是如何显示,没有在任务结束如何关闭的文章,参考其他文章经过试验之后把整套进度条显示的简单示例如下: 建立android工程等工作都略去,Google一下就可以了. 下面来介绍主 ...

  5. iOS 和Android中的正则表达式简单使用

    ios 中需要使用NSRegularExpression类,NSTextCheckingResult类. 下面给出最基本的实现代码 NSRegularExpression *regex = [NSRe ...

  6. Android中SharePreferences的简单实现

    Android中提供SharePreferences这种轻量级的数据存储模式,这种模式能够存储少量数据,并能为自身和其他应用提供数据接口.相对于其他数据存储方式,SharePreferences更加轻 ...

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

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

  8. Android中SharedPerforences的简单使用示例 --Android基础

    SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...

  9. Android中关于回调概念的笔记

    一.回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调 ...

随机推荐

  1. r-cnn学习(五):SmoothL1LossLayer论文与代码的结合理解

    A Loss Function for Learning Region Proposals 训练RPN时,只对两种anchor给予正标签:和gt_box有着最高的IoU && IoU超 ...

  2. JavaScript方法

    1.hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象.不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员.isPrototype ...

  3. MVC学习笔记

    7 天玩转 ASP.NET MVC 阅读笔记 1.Web Form的问题 1.响应慢,web控件转化成html需要时间 2.带宽消耗,页面保存web控件的状态(viewstate) 3.由web控件生 ...

  4. 使用SQL语句对数据进行MD5加密

    如果数据库表User中有一列为passwd,存放的是md5加密的数据,如何更新新的数据. update user set passwd=md5("123321") where uN ...

  5. java 处理XML(dom4j-1.6.1)

    java 处理XML(dom4j-1.6.1) Java 处理xml有很多框架,今天使用主流框架dom4j-1.6.1 下载地址:http://www.dom4j.org/dom4j-1.6.1/ D ...

  6. Spring+SpringMvc+Mybatis框架集成搭建教程一(项目创建)

    一.框架搭建环境 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Idea 15.04 二 ...

  7. October 15th 2016 Week 42nd Saturday

    Word to World. There are only two kinds of people who are really fascinating, people who know absolu ...

  8. Linux TOP 交互命令

    今天总结一点top命令的一些交互命令,比较实用! h或者?       显示帮助画面,给出一些简短的命令总结说明 k                          终止一个进程. 系统将提示用户输 ...

  9. ASP.NET4.5Web API及非同步程序开发系列(1)

    认识非同步程序开发设计模型 从VS2012开始引入的新的非同步程序设计的支持-------async/await设计模型 之前的当我们支持非同步作业的时候,往往使用多线程开解决,我们比较熟悉的就是 执 ...

  10. Mac下环境变量配置

    Mac下的常用环境变量配置文件 1./etc/profile   (建议不修改这个文件 ) 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. 2./etc/bashrc    (一般在这个文件 ...