Android之---回调机制(CallBack)

来源:互联网 发布:excel数据透视表行标签 编辑:程序博客网 时间:2024/06/06 03:15

回调机制(CallBack)

简介

回调方法:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。
回调方法的实现过程就叫Android(Java)的回调机制。

原理

  1. 定义一个回调接口(CallBack)和一个回调函数 (call)
  2. 让类A实现这个回调接口和回调函数,在类A的构造中拿到类B的应用
  3. 在类B中声明一个带CallBack参数的方法(setCallBack(CallBack CallBack ……))
  4. 在类A中用类B的应用调用类B的方法setCallBack(),然后在setCallBack方法中用类A的对象(即CallBack回调接口的实现类)调用类A中的方法call(即回调函数)

异步实现案例

interface CallBack:

/**  * 这是一个回调接口  * @author xiaokele *  */  public interface CallBack {      /**      * 回调函数      * @param result      */      public void call(String result);  }  

class A:

/**  * @author xiaokele * 实现了一个回调接口CallBack */  public class A implements CallBack {      /**      * 类B的引用     */      private B b;       /**      * A的构造方法,持有B的引用      * @param B      */      public A(B b){          this.b= b;      }      /**      * A通过这个方法去问B的问题      * @param question       */      public void askQuestion(final String question){          //这里用一个线程就是异步,          new Thread(new Runnable() {              @Override              public void run() {                  /**                  * A调用B中的方法,在这里注册回调接口                  * 这就相当于A类调用B的方法C                  */                  b.setCallBack(A.this, question);               }          }).start();          //A问完问题就去干其他的事情了,诳街去了          play();      }      public void play(){          System.out.println("我要逛街去了");      }      /**      * B知道答案后调用此方法告诉A,就是所谓的A的回调方法      */      @Override      public void call(String result) {          System.out.println("B告诉A的答案是--->" + result);      }    }  

class B:

/**  * 类B * @author xiaokele *  */  public class B{      /**     * @param callBack        * @param question  A问的问题      */      public void setCallBack(CallBack callBack, String question){          System.out.println("A问的问题--->" + question);          //模拟B办自己的事情需要很长时间          for(int i=0; i<10000;i++){          }          /**          * B办完自己的事情之后想到了答案是2         */          String result = "答案是2";          /**          * 于是就打电话告诉A,调用A中的方法          * 这就相当于B类反过来调用A的方法D          */          callBack.call(result);     } } 

同步实现案例

同步实现类似上面的异步实现(去掉异步案例中类A中askQuestion方法中开线程和类B中setCallBack方法中办自己事情去了)

0 0
原创粉丝点击