JAVA回调函数ANDROID中典型的回调地方
在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序。
在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中典型的回调地方的更多相关文章
- Android中的接口回调技术
Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...
- Android 中的接口回调
http://blog.csdn.net/wangjinyu501/article/details/22052187 在Android中到处可见接口回调机制,尤其是UI事件处理方面.举一个最常见的 ...
- 回调深入理解 同步回调 以android中View.OnClickListener为列
现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了 //这个是View的 ...
- Node.js 的异步机制由事件和回调函数——循环中的回调函数
var fs=require('fs'); var files =['a.txt','b.txt','c.txt']; // for (var i = 0; i < files.length; ...
- promise核心技术 2.两种回调函数 js中error的处理
抽空详细学习一下什么是回调函数(一个回调函数,也被称为高阶函数) 1.什么样的函数是回调函数 自己定义的(sittimeout不是自己定义的) 没有调用 自己执行 1.同步回调与异步回调函数 同步回调 ...
- WPF如何获得变量异步回调函数时产生的异步回调
有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...
- C/C++ 不带参数的回调函数 与 带参数的回调函数 函数指针数组 例子
先来不带参数的回调函数例子 #include <iostream> #include <windows.h> void printFunc() { std::cout<& ...
- socket.io笔记二之事件监听回调函数接收一个客户端的回调函数
//服务端 socket.on('test', function (name, fn) { console.log(name) //输出yes fn('woot'); }); //客户端 socket ...
- Android中典型的ROOT原理(5)
ROOT的作用 Customization 用户的个人定制,如删除一些预安装,定制开机动画等. 特权操作 所有需要特权操作的基本都是要通过ROOT,这也是ROOT的初衷. ROOT的第一步:寻找漏洞并 ...
随机推荐
- 介绍PS大局观很不错的转文
http://blog.chinaunix.net/uid-20535506-id-1931615.html PowerShell初探 PowerShell的一些特点: ü 内含上百种 ...
- Redis应用场景 及其数据对象 string hash list set sortedset
原文地址:http://www.cnblogs.com/shanyou/archive/2012/09/04/2670972.html Redis开创了一种新的数据存储思路,使用Redis,我们不用在 ...
- jetty插件配置
1.jetty maven 插件启动设置: Base directory:${project_loc} Goals:clean -Djetty.port=8080 jetty:run 2.jetty ...
- Apache-common项目提供的工具
---- MD5加密与生成UUID例子(依赖于commons-io.jar):begin ------------------------------------------------------- ...
- RHEL修改主机名和IP
1, 修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=NEWHOSTNAME #修改该值作为主机名,如:NEWPC ...
- 利用TreeSet给纯数字字符串排序
import java.util.Iterator;import java.util.TreeSet; /* * 给字符串中的数字排序 * String str = "10,2,11,1,3 ...
- SOA——面向服务的体系架构
上一篇博文中提到了"紧耦合"的现象.怎样解决?SOA.採用面向服务的体系架构. 一.What? SOA=Service-oriented Architecture面向服务的体系结构 ...
- CentOS7 安装chrome浏览器
本篇文章主要记录如何在CentOS7.0上安装chrome. 1.配置yum下载源: 在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo, 并且在该文件中添加 ...
- USB通讯协议之深入理解
0. 基本概念 一个[传输](控制.批量.中断.等时):由多个[事务]组成: 一个[事务](IN.OUT.SETUP):由一多个[Packet]组成. USB数据在[主机软件]与[USB设备特定的端点 ...
- mybatis与spring的整合
今天是mybatis的最后一天,也是最为重要的一天,mybatis与spring整合,(spring相关知识我会抽一个大的模块进行讲解). 首先加入Spring的依赖 <dependency&g ...