在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序。

在JAVA里面我们使用接口的方式来实现函数的回调。

回调的通俗就是:程序员阿祥写了一段程序(CallPerson)其中有回调函数的接口(PhoneCall),并且封装好了程序(CallPerson)。程序员阿呆写了程序(MumCall)要让

阿祥写的程序(CallPerson)调用阿呆写的程序(MumCall)中的方法。于是阿祥的程序(CallPerson)通过程序中(CallPerson)的接口(PhoneCall)调用阿呆的程序(MumCall)的方法。

列子如下:

/**
* 阿祥的程序CallPerson
* @author joker.chan
*
*/
public class CallPerson { private PhoneCall phoneCall; public CallPerson(PhoneCall phoneCall) {
// TODO Auto-generated constructor stub
this.phoneCall = phoneCall;
} public void phoneCall() {
phoneCall.phonecall();
} }
/**
* 回调函数电话接口
* @author joker.chan
*
*/
public interface PhoneCall { public void phonecall(); }
/**
* 阿呆的程序MumCall
* @author joker.chan
*
*/
public class MumCall implements PhoneCall { @Override
public void phonecall() {
// TODO Auto-generated method stub
System.out.println("妈妈打电话叫你回家吃饭了!!!");
} }

调用方法:

public static void main(String[] args) {
// TODO Auto-generated method stub
MumCall mc = new MumCall();
CallPerson cp = new CallPerson(mc);
cp.phoneCall(); }

运行结果:

妈妈打电话叫你回家吃饭了!!!

Android中回调函数的基本使用。

1.按钮的监听

Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(newButton.OnClickListener() { //回调函数
@override
publicvoidonClick(View v) {
buttonTextView.setText("按钮被点击了");
}
});

上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。

2.生命周期函数

@Override
publicvoidonCreate(BundlesaveInstanceState) {
super.onCreate(saveInstanceState);
// You code...
}
@Override
publicvoidonResume() {
super.onResume();
// You code...
}

Activity的整个生命周期基本上都说回调函数在发挥作用。

优点:优点主要是将代码中变与不变的部分相分离,从而大大提高了程序的重用性和扩展性。

Android事件侦听器是视图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。回调方法被包含在Android事件侦听器接口中:

例如,Android 的view 对象都含有一个命名为 OnClickListener 接口成员变量,用户的点击操作都会交给 OnClickListener的 OnClick() 方法进行处理。

开发者若需要对点击事件做处理,可以定义一个 OnClickListener 接口对象,赋给需要被点击的 view的接口成员变量OnClickListener,一般是用 view 的setOnClickListener() 函数来完成这一操作。

当有用户点击事件时,系统就会回调被点击view的OnClickListener接口成员的OnClick()方法。

实例(对于Android界面上Button点击事件监听的模拟):

1.定义接口
public interface OnClickListener { public void OnClick(Button b); }
2. 定义Button
public class Button {
OnClickListener listener; public void click() {
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}
3. 将接口对象OnClickListener 赋给 Button的接口成员
public class Activity {
public Activity() {
}
public static void main(String[] args) {
Button button = new Button();
button.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(Button b) {
System.out.println("clicked");
}
});
button.click(); //user click,System call button.click();
}

JAVA回调函数ANDROID中典型的回调地方的更多相关文章

  1. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  2. Android 中的接口回调

    http://blog.csdn.net/wangjinyu501/article/details/22052187   在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...

  3. 回调深入理解 同步回调 以android中View.OnClickListener为列

    现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了   //这个是View的 ...

  4. Node.js 的异步机制由事件和回调函数——循环中的回调函数

    var fs=require('fs'); var files =['a.txt','b.txt','c.txt']; // for (var i = 0; i < files.length; ...

  5. promise核心技术 2.两种回调函数 js中error的处理

    抽空详细学习一下什么是回调函数(一个回调函数,也被称为高阶函数) 1.什么样的函数是回调函数 自己定义的(sittimeout不是自己定义的) 没有调用 自己执行 1.同步回调与异步回调函数 同步回调 ...

  6. WPF如何获得变量异步回调函数时产生的异步回调

    有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...

  7. C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子

    先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...

  8. socket.io笔记二之事件监听回调函数接收一个客户端的回调函数

    //服务端 socket.on('test', function (name, fn) { console.log(name) //输出yes fn('woot'); }); //客户端 socket ...

  9. Android中典型的ROOT原理(5)

    ROOT的作用 Customization 用户的个人定制,如删除一些预安装,定制开机动画等. 特权操作 所有需要特权操作的基本都是要通过ROOT,这也是ROOT的初衷. ROOT的第一步:寻找漏洞并 ...

随机推荐

  1. 实用C51编程的高级技巧(C51编程)

    一.C51热启动代码的编制 void main() { char data *HotPoint=(char *)0x7f; if((*HotPoint==0xaa)&&(*(--Hot ...

  2. 【HDOJ】1332 LC-Display

    水题. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 11 #defin ...

  3. Scala-变量、常量和懒加载

    package com.mengyao.scala.function /** * Scala的变量声明和使用(可变类型和值类型) *  * @author mengyao */object Test0 ...

  4. yii 分页 (ajax)

    Controller:class MemberController extends Controller { public function actionmember_list()    {      ...

  5. IOS设计模式学习(18)模板方法

    1 前言 模板方法模式是面向对象软件设计中一种非常简单的设计模式.其基本思想是在抽象类的一个方法定义“标准”算法.在这个方法中调用的基本操作由子类重载予以实现.这个方法成为“模板”.因为方法定义的算法 ...

  6. MFC原创:三层架构01(人事管理系统)DAL

    VC++/MFC Window编程原创教程文件夹 C++课程设计来着.但还没学过数据,也还没理解过三层架构,就把这个作业深化点来做了.尽管要做的这个人事管理系统看起来是挺简单的,无非就是处理员工信息. ...

  7. openwrt network interface(openwrt中的网络接口)

    这篇算是对openwrt网络接口的一个翻译吧,源地址:http://wiki.openwrt.org/doc/networking/network.interfaces network的接口类型:物理 ...

  8. Java基础知识强化67:基本类型包装类之Integer直接赋值的面试题

    1. 面试题: Integer  i = 1: i += 1: 做了哪些事情? (1)其中Integer i =1:做了自动装箱( 使用valueOf()方法,int ---> Integer ...

  9. centos7编译安装MySQL5.7.9

    title: centos7编译安装MySQL5.7.9 date: 2016-05-12 16:20:17 tags: --- Centos7编译安装mysql5.7.9 mysql5.7有更好的性 ...

  10. css中的clear的正真意义

    网上包括w3cschool 的说法都是 不允许浮动.消除浮动 这样的说法,却看了还是不知道什么意思,一些地方说不通. 所以找到w3c css 的英文文档,如下是节选: 'clear'Values ha ...