Android中的回调函数callback的使用
2016-04-10 16:52
411 查看
今天所看到的一篇对callback回调函数的讲解,感觉比较好懂,分享一下
转载自http://www.linuxidc.com/Linux/2012-12/75624.htm
回调函数简单来说就是,A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。这样解释可能有点绕不过来,下面我们来看一个例子。
比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口(B),张三(b)和李四(b)都实现了这个“接口”,闹铃(A)到一定时间后就要“响铃”,响铃就要发出“铃声”(a),“铃声”就去叫人(c),至于人会做什么就是人本身的事情。下面看个代码。
1.接口CallPerson
publicinterface CallPerson {
publicabstractvoid doCallPerson ();
}
publicclass Zhangsan implements CallPerson {
String name = "Zhangsan";
public String getName () {
return name;
}
@Override
publicvoid doCallPerson() {
System.out.println(getName() + "听到铃声,勤鸟,起床了!");
}
}
publicclass Lisi implements CallPerson {
String name = "Lisi";
public String getName () {
return name;
}
@Override
publicvoid doCallPerson() {
System.out.println(getName() + "听到铃声,懒猪,没起床!");
}
}
publicclass Alarm {
//响铃
publicvoid ring (CallPerson callPerson) {
callPerson.doCallPerson();
}
}
import android.os.Bundle;
import android.app.Activity;
publicclass MainActivity extends Activity {
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
Alarm alarm = new Alarm();
Zhangsan zhangsan = new Zhangsan();
Lisi lisi = new Lisi();
//模拟闹铃定时时间到,然后响铃
alarm.ring(zhangsan);
alarm.ring(lisi);
}
}
12-07 21:49:41.947: INFO/System.out(6107): Zhangsan听到铃声,勤鸟,起床了!
12-07 21:49:41.947: INFO/System.out(6107): Lisi听到铃声,懒猪,没起床!
转载自http://www.linuxidc.com/Linux/2012-12/75624.htm
回调函数简单来说就是,A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。这样解释可能有点绕不过来,下面我们来看一个例子。
比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口(B),张三(b)和李四(b)都实现了这个“接口”,闹铃(A)到一定时间后就要“响铃”,响铃就要发出“铃声”(a),“铃声”就去叫人(c),至于人会做什么就是人本身的事情。下面看个代码。
1.接口CallPerson
publicinterface CallPerson {
publicabstractvoid doCallPerson ();
}
定义了一个“叫人”的方法。实现这个接口可理解成安装了闹铃。
2.类Zhangsan
publicclass Zhangsan implements CallPerson {String name = "Zhangsan";
public String getName () {
return name;
}
@Override
publicvoid doCallPerson() {
System.out.println(getName() + "听到铃声,勤鸟,起床了!");
}
}
3.类Lisi
publicclass Lisi implements CallPerson {String name = "Lisi";
public String getName () {
return name;
}
@Override
publicvoid doCallPerson() {
System.out.println(getName() + "听到铃声,懒猪,没起床!");
}
}
4.类Alarm
publicclass Alarm {//响铃
publicvoid ring (CallPerson callPerson) {
callPerson.doCallPerson();
}
}
5.Activity
然后我们在Activity里模拟闹铃开始响铃
import android.os.Bundle;import android.app.Activity;
publicclass MainActivity extends Activity {
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
Alarm alarm = new Alarm();
Zhangsan zhangsan = new Zhangsan();
Lisi lisi = new Lisi();
//模拟闹铃定时时间到,然后响铃
alarm.ring(zhangsan);
alarm.ring(lisi);
}
}
最后,我们来看看执行的结果
12-07 21:49:41.947: INFO/System.out(6107): Zhangsan听到铃声,勤鸟,起床了!12-07 21:49:41.947: INFO/System.out(6107): Lisi听到铃声,懒猪,没起床!
相关文章推荐
- Android 嵌套滑动分析
- 关于Adapter的notifyDataSetChanged是否生效
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
- Android handler机制
- android中string.xml中%一$s、%1$d等的用法
- Android属性动画完全解析(上),初识属性动画的基本用法
- android 绘图之Path与Paint详解
- 【Android基础】通过SharedPreferences来保存数据
- Android学习(12) -- 返回键(Back)与Home键区别
- Android——数据存储:手机内部存储
- Android开发中ImageLoder进行图片加载和缓存
- QT5 for android 实现横屏锁定
- 获取Android设备唯一标识码
- AndroidManifest.xml file missing!问题
- 【Android基础】通过流将文件写入手机data目录
- Android 通过webservice上传多张图片到指定服务器上面
- Android LayoutInflater及inflate方法
- 如何将AndroidStudio项目发布到Github
- 【Android基础】文件操作
- Android - 创建Wi-Fi热点、连接Wi-Fi