Android 对接口的封装使用

前言

本篇文章主要是记录Android代码 对java 接口的封装和使用方法,比较基础,记录一下,阅读本篇文章前,请移步java基础系列(九) 接口和抽象类 这篇文章。

接口理解

从设计角度: 设计方面的区别

抽象类是对一种事物的抽象,即对类的抽象;而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为;接口是对类局部(行为)进行抽象。

比如:飞机和鸟不是同类的事物,但是它们都有一个共性---会飞。那么在设计的时候,可以将飞机设计为一个类Plane,将鸟设计为一个类Bird,但是不能将飞行这个特性也设计为一个类,因为它只是一个行为,并不是对一类事物的抽象描述。此时,可以将飞行设计为一个接口Fly,包含方法fly(),然后Plane和Bird分别根据自己的需要实现Fly这个接口。

然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Plane即可,对于鸟类也是类似的,不同种类的鸟直接继承Bird类即可。

(从这个例子中能看出,继承是一个"是不是"的关系,而接口实现则是"有没有、具备不具备"的关系)

示例

工程结构: 就三个文件

定义了两种 接口类型,一个MyInterface文件, 一个在Listener.java文件中定义内部接口

代码如下:

Listener.java

java 复制代码
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class Listener {

    private Context mContext;
    private IntentFilter mHomeBtnIntentFilter;
    private OnHomeBtnPressLitener mOnHomeBtnPressListener;
    private HomeBtnReceiver mHomeBtnReceiver;

    private MyInterface myInterfaceTest;


    public Listener(Context context) {
        mContext = context;
        mHomeBtnReceiver = new HomeBtnReceiver( );
        mHomeBtnIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    public void setOnHomeBtnPressListener( OnHomeBtnPressLitener onHomeBtnPressListener ){
        mOnHomeBtnPressListener = onHomeBtnPressListener;
    }

    public void setHelloGoodByeListener(MyInterface myInterface) {
        myInterfaceTest = myInterface;
    }

    public void start( ){
        mContext.registerReceiver(mHomeBtnReceiver, mHomeBtnIntentFilter);
    }


    public void stop( ){
        mContext.unregisterReceiver(mHomeBtnReceiver);
    }

    class HomeBtnReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            receive( context, intent );
        }
    }

    private void receive(Context context, Intent intent){
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
            //按下home键处理实现接口中的事件
            mOnHomeBtnPressListener.onHomeBtnPress( );
            mOnHomeBtnPressListener.onHomeBtnLongPress();

            myInterfaceTest.sayHello("你好 各位美女帅哥");
            myInterfaceTest.sayGoodbye();
        }
    }


   //在Listener.java 文件中定义的内部接口
    public interface OnHomeBtnPressLitener{
        public void onHomeBtnPress( );
        public void onHomeBtnLongPress( );
    }
}
复制代码
MyInterface.java文件
java 复制代码
public interface MyInterface {
    void sayHello(String str);

    void sayGoodbye();

}

主调用文件 MainActivity.java

java 复制代码
public class MainActivity extends AppCompatActivity {


    private Listener mListen = null;
    private Listener.OnHomeBtnPressLitener listener;

    private MyInterface myInterface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listener = new Listener.OnHomeBtnPressLitener() {
            @Override
            public void onHomeBtnPress() {
                showToast( "按下Home按键!" );
            }

            @Override
            public void onHomeBtnLongPress() {
                showToast( "长按Home按键!" );
            }
        };

        myInterface = new MyInterface() {
            @Override
            public void sayHello(String test) {
                Toast.makeText( MainActivity.this, test, Toast.LENGTH_LONG).show( );
            }

            @Override
            public void sayGoodbye() {
                Toast.makeText(MainActivity.this, "拜拜", Toast.LENGTH_LONG).show();
            }
        };

        initListen( );
    }

    @Override
    protected void onResume( ) {
        super.onResume();
        mListen.start( );
    }


    @Override
    protected void onPause() {
        super.onPause();
        mListen.stop( );
    }

    private void initListen( ){
        mListen = new Listener( this );
        mListen.setOnHomeBtnPressListener(listener);
        mListen.setHelloGoodByeListener(myInterface);
    }

    private void showToast( String toastInfoStr ){
        Toast.makeText( this, toastInfoStr, Toast.LENGTH_LONG ).show( );
    }
}
相关推荐
大胃粥1 小时前
Android V app 冷启动(8) 动画结束
android
ufo00l2 小时前
Kotlin在Android中有哪些重要的应用和知识点是需要学习或者重点关注的
android
AJi2 小时前
Android音视频框架探索(二):Binder——系统服务的通信基础
android·ffmpeg·音视频开发
tjsoft2 小时前
Nginx配置伪静态,URL重写
android·运维·nginx
努力学习的小廉3 小时前
【C++11(中)】—— 我与C++的不解之缘(三十一)
android·java·c++
tangweiguo030519873 小时前
打破界限:Android XML与Jetpack Compose深度互操作指南
android·kotlin·compose
Watink Cpper4 小时前
[MySQL初阶]MySQL(8)索引机制:下
android·数据库·b树·mysql·b+树·myisam·innodedb
一起搞IT吧4 小时前
高通camx IOVA内存不足,导致10-15x持续拍照后,点击拍照键定屏无反应,过一会相机闪退
android·数码相机
前行的小黑炭6 小时前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
ufo00l7 小时前
2025年了,Rxjava解决的用户痛点,是否kotlin协程也能解决,他们各有什么优缺点?
android