您的位置:首页 > 移动开发 > Android开发

android下的回调机制 分享

2015-09-09 16:58 417 查看
      回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

回调机制在Android框架中的使用

  这里有几个例子:

  1、在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。

    实例(对于Android界面上Button点击事件监听的模拟):

    a.定义接口

[java]
view plaincopy

public interface OnClickListener {  
  public void OnClick(Button b);  
  
                  }  

    b. 定义Button

    

[html]
view plaincopy

public class Button {  
 OnClickListener listener;  
 public void click() {  
   listener.OnClick(this);  
 }  
 public void setOnClickListener(OnClickListener listener) {  
   this.listener = listener;  
 }  
}  

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

    

[html]
view plaincopy

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 plaincopy

public interface Activity{  
      public void onCreate();  
      .....  
      public void onDestory();  
    }  

    b. Activity接口的实现类MyActivity

    //定义一个类实现Activity接口

    

[java]
view plaincopy

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 plaincopy

//系统运行安装类  
   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 plaincopy

 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: