Android开发 回调的理解
2016-02-15 15:57
381 查看
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
回调机制在Android框架中的使用
这里有几个例子:
1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Button点击事件监听的模拟):
a.定义接口
[java] view
plain copy
public interface OnClickListener {
public void OnClick(Button b);
}
b. 定义Button
[html] view
plain copy
public class Button {
OnClickListener listener;
public void click() {
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}
c. 将接口对象OnClickListener 赋给 Button的接口成员
[html] view
plain copy
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();
}
}
2、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Activity的模拟):
a.定义接口
[html] view
plain copy
public interface Activity{
public void onCreate();
.....
public void onDestory();
}
b. Activity接口的实现类MyActivity
//定义一个类实现Activity接口
[java] view
plain copy
public calss MyActivity implements Activity{
@Override//实现方法,简单输出
public void onCreate(){
System.out.println("onCereate");
}
.....
@Override//实现方法,简单输出
public void onDestory(){
System.out.println("onDestory");
}
}
c.系统运行环境类AndroidSystem
[java] view
plain copy
//系统运行安装类
public class AndroidSystem{
//定义常量
public static final int CREATE=1;
....
public static final int DESTORY=2;
//运行方法
public void run(Activity a,int state){
switch(state){
case CREATE:
a.onCreate;
break;
....
case DESTORY:
a.onDestory();
break;
}
}
}
d.测试类
[java] view
plain copy
publilc class Test{
public static void main(String[] args){
//实例化AndroidSystem
AndroidSystem system = new AndroidSystem();
//实例化MyActivity
Activity a = new MyActivity();
system.run(a,AndroidSystem.CREAATE);
....
system.run(a,AndroidSystem.DESTORY);
}
}
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
个人理解: Class A 实现接口interface Callback重写起方法;
实例化后传递给Class B 的函数使用,
Class B 的 方法method(Callback c ) 接受到此接口的实例 c,
在method中调用A 实现的callback的方法;
转载于:
http://www.cnblogs.com/vtianyun/archive/2012/06/19/2555427.html
回调机制在Android框架中的使用
这里有几个例子:
1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Button点击事件监听的模拟):
a.定义接口
[java] view
plain copy
public interface OnClickListener {
public void OnClick(Button b);
}
b. 定义Button
[html] view
plain copy
public class Button {
OnClickListener listener;
public void click() {
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}
c. 将接口对象OnClickListener 赋给 Button的接口成员
[html] view
plain copy
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();
}
}
2、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
实例(对于Android界面上Activity的模拟):
a.定义接口
[html] view
plain copy
public interface Activity{
public void onCreate();
.....
public void onDestory();
}
b. Activity接口的实现类MyActivity
//定义一个类实现Activity接口
[java] view
plain copy
public calss MyActivity implements Activity{
@Override//实现方法,简单输出
public void onCreate(){
System.out.println("onCereate");
}
.....
@Override//实现方法,简单输出
public void onDestory(){
System.out.println("onDestory");
}
}
c.系统运行环境类AndroidSystem
[java] view
plain copy
//系统运行安装类
public class AndroidSystem{
//定义常量
public static final int CREATE=1;
....
public static final int DESTORY=2;
//运行方法
public void run(Activity a,int state){
switch(state){
case CREATE:
a.onCreate;
break;
....
case DESTORY:
a.onDestory();
break;
}
}
}
d.测试类
[java] view
plain copy
publilc class Test{
public static void main(String[] args){
//实例化AndroidSystem
AndroidSystem system = new AndroidSystem();
//实例化MyActivity
Activity a = new MyActivity();
system.run(a,AndroidSystem.CREAATE);
....
system.run(a,AndroidSystem.DESTORY);
}
}
以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。
个人理解: Class A 实现接口interface Callback重写起方法;
实例化后传递给Class B 的函数使用,
Class B 的 方法method(Callback c ) 接受到此接口的实例 c,
在method中调用A 实现的callback的方法;
转载于:
http://www.cnblogs.com/vtianyun/archive/2012/06/19/2555427.html
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories