android下的回调机制 分享

来源:互联网 发布:只有我知3三小时完整版 编辑:程序博客网 时间:2024/04/29 19:55
      回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。


回调机制在Android框架中的使用
  这里有几个例子:
  1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
    实例(对于Android界面上Button点击事件监听的模拟):
    a.定义接口

[java] view plaincopy
  1. public interface OnClickListener {  
  2.   public void OnClick(Button b);  
  3.   
  4.                   }  

    b. 定义Button
    

[html] view plaincopy
  1. public class Button {  
  2.  OnClickListener listener;  
  3.  public void click() {  
  4.    listener.OnClick(this);  
  5.  }  
  6.  public void setOnClickListener(OnClickListener listener) {  
  7.    this.listener = listener;  
  8.  }  
  9. }  

              c. 将接口对象OnClickListener 赋给 Button的接口成员
    

[html] view plaincopy
  1. public class Activity {  
  2.       public Activity() {  
  3.       }  
  4.       public static void main(String[] args) {  
  5.         Button button = new Button();  
  6.         button.setOnClickListener(new OnClickListener(){  
  7.           @Override  
  8.           public void OnClick(Button b) {  
  9.             System.out.println("clicked");  
  10.           }  
  11.         });  
  12.         button.click(); //user click,System call button.click();  
  13.       }  
  14.     }  

 

  2、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。
    实例(对于Android界面上Activity的模拟):
    a.定义接口

 

[html] view plaincopy
  1. public interface Activity{  
  2.       public void onCreate();  
  3.       .....  
  4.       public void onDestory();  
  5.     }  

    b. Activity接口的实现类MyActivity
    //定义一个类实现Activity接口
    

[java] view plaincopy
  1. public calss MyActivity implements Activity{  
  2.       @Override//实现方法,简单输出  
  3.       public void onCreate(){  
  4.         System.out.println("onCereate");  
  5.       }  
  6.       .....  
  7.       @Override//实现方法,简单输出  
  8.       public void onDestory(){  
  9.         System.out.println("onDestory");  
  10.       }  
  11.     }  

    c.系统运行环境类AndroidSystem

[java] view plaincopy
  1. //系统运行安装类  
  2.    public class AndroidSystem{  
  3.      //定义常量  
  4.   
  5.      public static final int CREATE=1;  
  6.       ....  
  7.      public static final int DESTORY=2;  
  8.      //运行方法  
  9.      public void run(Activity a,int state){  
  10.        switch(state){  
  11.        case CREATE:  
  12.          a.onCreate;  
  13.          break;  
  14.        ....  
  15.        case DESTORY:  
  16.          a.onDestory();  
  17.          break;  
  18.        }  
  19.      }  
  20.    }  


   
    d.测试类

[java] view plaincopy
  1.  publilc class Test{  
  2.   public static void main(String[] args){  
  3.     //实例化AndroidSystem  
  4.     AndroidSystem system = new AndroidSystem();  
  5.     //实例化MyActivity  
  6.     Activity a = new MyActivity();  
  7.     system.run(a,AndroidSystem.CREAATE);  
  8.     ....  
  9.     system.run(a,AndroidSystem.DESTORY);  
  10.   }  
  11. }  


  以上可以看出,接口(系统框架)是系统提供的,接口的实现是用户实现的,这样可以达到接口统一,实现不同的效果。
  系统在不同的状态“回调”我们的实现类,来达到接口和实现的分类。

 

 

 个人理解: 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


0 0