android 回调机制

           在Android中,随处可见回调机制,拿个最简单的例子来说吧,按钮的点击事件onClick方法,源码中就是利用回调,如下

/**
 * Interface definition for a callback to be invoked when a view is clicked.
 */
public interface OnClickListener {
    /**
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    void onClick(View v);
}

    当然,Android回调最经典的莫过于那个打电话的例子了,网上也有很多同学说的很好,在此就不重复说了

一:什么是回调函数

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

         2.Java中不允许直接操作指针,那么Java中回调如何实现?

              我们都知道在C、C++或者JavaScript中经常有回调的方法,这种回调的方法都是通过指针来实现的。那么在Java中却不允许直接操作指针,所以Java中定义的回调是通过接口来实现的。

         3.什么是接口回调?

            可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。

二:Android为什么要用接口回调?

              1.回顾一下什么是为什么有接口?

          接口是可以被多实现的,这也决定了实现类可向上转型为多个接口基类型。向上转型的意思其实就是Java的多态性,可以通过父类的引用指向了子类的对象!这样有助于提高程序的拓展性,可维护性!

          2.为什么用回调?

          方法回调是功能定义和功能实现分离的一种手段,是一种松耦合的设计思想。作为一种系统架构,必须有自己的运行环境,并且提供用户实现的接口。

三:接口回调怎么用?

      基本的使用方法如下:

               1.先创建一个接口,这个接口用于你在某个情景下执行相应的操作。

          2.创建一个实现类,在类中声明实现回调接口的对象,之后在这个类里面创建在某个情景下需要执行的方法,而且在这个方法里面为声明的接口对象赋值。

          3.最后在其他的类中使用这个功能类。

interface People {
	void work();
}

class Teacher implements People {
	@Override
	public void work() {
		System.out.println("我是老师,我的工作是教学");
	}
}

class Ask {
	private People people;

	public void setPeople(People people) {
		this.people = people;
	}

	public void resultForAsk() {
		people.work();
	}
}

public class Example {
	public static void main(String[] args) {
		Ask ask = new Ask();
		ask.setPeople(new Teacher());
		ask.resultForAsk();
		
		//其实很多时候我们习惯于这样写
		Ask ask2 = new Ask();
		ask.setPeople(new People() {
			@Override
			public void work() {
				System.out.println("Test  test");
			}
		});
		ask.resultForAsk();
	}
}



              

你可能感兴趣的:(android,base)