JAVA回调函数ANDROID中典型的回调地方

Posted on 2015-04-13 16:30  阿祥当码农  阅读(612)  评论(0编辑  收藏  举报

在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序。

在JAVA里面我们使用接口的方式来实现函数的回调。

回调的通俗就是:程序员阿祥写了一段程序(CallPerson)其中有回调函数的接口(PhoneCall),并且封装好了程序(CallPerson)。程序员阿呆写了程序(MumCall)要让

阿祥写的程序(CallPerson)调用阿呆写的程序(MumCall)中的方法。于是阿祥的程序(CallPerson)通过程序中(CallPerson)的接口(PhoneCall)调用阿呆的程序(MumCall)的方法。

列子如下:

/**
 * 阿祥的程序CallPerson
 * @author joker.chan
 *
 */
public class CallPerson {

    private PhoneCall phoneCall;
    
    public CallPerson(PhoneCall phoneCall) {
        // TODO Auto-generated constructor stub
        this.phoneCall = phoneCall;
    }
    
    public void phoneCall() {
        phoneCall.phonecall();
    }
    
}
/**
 * 回调函数电话接口
 * @author joker.chan
 *
 */
public interface PhoneCall {

    public void phonecall();
    
}
/**
 * 阿呆的程序MumCall
 * @author joker.chan
 *
 */
public class MumCall implements PhoneCall {

    @Override
    public void phonecall() {
        // TODO Auto-generated method stub
        System.out.println("妈妈打电话叫你回家吃饭了!!!");
    }

}

调用方法:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        MumCall mc = new MumCall();
        CallPerson cp = new CallPerson(mc);
        cp.phoneCall();

    }

 

运行结果:

妈妈打电话叫你回家吃饭了!!!

 Android中回调函数的基本使用。

1.按钮的监听

Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(newButton.OnClickListener() {

//回调函数
@override
publicvoidonClick(View v) {
buttonTextView.setText("按钮被点击了");
}
});

上面的代码给按钮加了一个事件监听器,这其实就是“回调”最常见的应用场景之一。我们自己不会显式地去调用onClick方法。用户触发了该按钮的点击事件后,它会由Android系统来自动调用。

2.生命周期函数

@Override
publicvoidonCreate(BundlesaveInstanceState) {
  super.onCreate(saveInstanceState);
 // You code...
}
@Override
publicvoidonResume() {
  super.onResume();
 // You code...
}

Activity的整个生命周期基本上都说回调函数在发挥作用。

优点:优点主要是将代码中变与不变的部分相分离,从而大大提高了程序的重用性和扩展性。

 

Android事件侦听器是视图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。回调方法被包含在Android事件侦听器接口中:

例如,Android 的view 对象都含有一个命名为 OnClickListener 接口成员变量,用户的点击操作都会交给 OnClickListener的 OnClick() 方法进行处理。

开发者若需要对点击事件做处理,可以定义一个 OnClickListener 接口对象,赋给需要被点击的 view的接口成员变量OnClickListener,一般是用 view 的setOnClickListener() 函数来完成这一操作。

当有用户点击事件时,系统就会回调被点击view的OnClickListener接口成员的OnClick()方法。

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

1.定义接口
public interface OnClickListener {
   
    public void OnClick(Button b);
 
}
2. 定义Button
public class Button {
  OnClickListener listener;
 
  public void click() {
    listener.OnClick(this);
  }
  public void setOnClickListener(OnClickListener listener) {
    this.listener = listener;
  }
}
3. 将接口对象OnClickListener 赋给 Button的接口成员
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();
  }