平时在写程序时经常会遇到监听器,比如按钮的click监听器,按键监听器等等。而android中的监听器和java中的回调函数是同一个概念,都是在底层代码中定义一个接口来调用高层的代码。那么什么是回调函数呢?网上说的是“在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就称为回调。在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃。这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。”按照我的理解就是在程序A中先挖了一个坑,然后等着你在程序B中去填里面的内容。不填?那就是被坑咯~

一、定义回调函数

  1. 建立一个类,其中包括一个接口的变量
    private CallBack callBack;//接口的变量
  2. 建立一个接口的声明
    public interface CallBack{   public void Out();//接口里面要实现的方法}
  3. 在类中与接口绑定(或者说获得接口的引用)
    public void setCallBack(CallBack callBack){        this.callBack = callBack;    }        public void Out(){        callBack.Out();        System.out.println("这是CallerClass的输出");    }
  4. 整个类
    public class CallerClass {        private CallBack callBack;//接口的声明        public CallerClass(){};        public void setCallBack(CallBack callBack){        this.callBack = callBack;    }        public void Out(){        callBack.Out();        System.out.println("这是CallerClass的输出");    }        public interface CallBack{        public void Out();//接口里面要实现的方法    }    }
    View Code

二、调用回调函数

我这里是在Activity中绑定接口,实际代码如下:

public class MainActivity extends Activity implements CallerClass.CallBack{  private CallerClass caller; ...}

继承了CallerClass中的CallBack接口,Out方法如下:

    @Override    public void Out() {        // TODO Auto-generated method stub        System.out.println("这是Activity上的输出");    }

最后在onCreate中调用CallerClass的Out()方法:

caller = new CallerClass();caller.setCallBack(this);caller.Out();

完整代码:

public class MainActivity extends Activity implements CallerClass.CallBack{        private CallerClass caller;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        caller = new CallerClass();        caller.setCallBack(this);        caller.Out();            }    @Override    public void Out() {        // TODO Auto-generated method stub        System.out.println("这是Activity上的输出");    }}

三、结果

Perfect~

interface的作用感觉和C++中的指针差不多,它是一个地址的引用,但没有生成内存。所以我们能够预先为程序赋予要执行的方法。不止如此,interface在设计模式的作用更是强大,工厂模式,建造者模式,观察者模式无不用到interface。

更多相关文章

  1. Android——《Android第一行代码》10.6节服务的最佳实践,应用8.0
  2. 应用程序如何获取系统权限
  3. Unity与Android交互方案优化版
  4. Android中Activity生命周期说明及使用
  5. Android(安卓)API Guides---Text and Input
  6. 【Android的从零单排开发日记】之入门篇(五)——Android四大组件之
  7. 回调机制在 Android(安卓)监听用户界面操作中的体现
  8. Android(安卓)Studio3.0开发JNI流程------JNI中字符串拼接的三种
  9. Android应用程序插件化研究之AssertManager

随机推荐

  1. android C++ 和 jni,根据JNIEnv的FindClas
  2. Android资源文件mk的格式
  3. unity3d 获取剩余空间大小 android and i
  4. Android 控件界面转成Bitmap
  5. 学习Android从0开始之开发工具篇-Android
  6. Android Material Design 实践(二)--Dial
  7. Android(安卓)环境的配置 以及 模拟器的
  8. Android 改变View位置 setLeft、etRight
  9. android:程序中安装APK方法
  10. Android跳转到系统Wifi界面的方式