美文网首页
Android Interface(接口)

Android Interface(接口)

作者: GODANDDEVIL | 来源:发表于2020-03-16 17:08 被阅读0次
1.png

(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将不再持有外部类引用
    }

}

相关文章

网友评论

      本文标题:Android Interface(接口)

      本文链接:https://www.haomeiwen.com/subject/htyvshtx.html