
(1)概念
接口变量存放实现该接口的类的对象的引用,从而接口变量就可以回调类中实现的接口方法。
(2)接口方法的调用和方法的实现
接口方法的定义以及接口方法的调用在一个类中,而接口方法的实现在另一个类中
(3)接口回调/回调函数
回调函数不是在实现该函数的类中直接调用的,而是在定义该接口方法的类中调用的,从而对某个事件进行响应。即接口方法的调用和接口方法的实现在不同的类中,而定义接口和调用接口方法一般情况下在同一个类中。
(4)接口回调的结果
接口回调的结果:接口变量调用被实现的接口的方法
(5)接口变量的初始化
接口变量的初始化:“接口的引用指向它的实例化对象”,即是通过实例化实现接口的类来实现一个接口变量的初始化。
(6)接口回调的完整过程通常由两个类完成:
一个类定义接口、接口方法和私有的接口变量,并提供注册接口的方法(也可以理解为接口变量的get方法),最后调用接口方法。
另一个类实现接口、调用接口的注册方法,最后实现接口的方法。
接下来我创建一个继承Handler的子类MyHandler,并在该类中定义一个接口inMyHandler。
import android.os.Handler;
import android.os.Message;
/**
* Handler单例的封装
*/
public class MyHandler extends Handler {
private MyHandler(){}
private static class MyHandlerHolder{
private static final MyHandler INSTANCE = new MyHandler();
}
static MyHandler getInstance(){
return MyHandlerHolder.INSTANCE;
}//返回线程安全的单例
@Override
public void handleMessage(Message message){//重写handleMessage方法
super.handleMessage(message);
if (inMyHandler!=null){
inMyHandler.InHandleMessage(message);//调用接口方法
}
}
private static InMyHandler inMyHandler;//定义接口变量
public interface InMyHandler{//定义接口
void InHandleMessage(Message message);//定义接口方法
}
void setInMyHandler(InMyHandler inMyHandler){//注册接口的方法
MyHandler.inMyHandler = inMyHandler;//接口的引用指向它的实例化对象,传入的参数inMyHandler为实现该接口的类的实例化对象
}
void removeInMyHandler(){//取消注册接口的方法
MyHandler.inMyHandler = null;//inMyHandler置为null,inMyHandler将不再持有外部类引用
}
}
网友评论