Android AIDL接口

一.AlDI接口简介

AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。

二.AIDL的语法

AIDL的语法和Java基本是一样的,只是在一些细微处有些许差别------毕竟它只是被创造出来简化Android程序员工作的。

列举一下AIDL和Java不一样的地方:

①文件类型:用AIDL书写的文件的后缀是.aidl,而不是.java。

②数据类型:AIDL默认支持一些数据类型,八种基本数据类型,包括byte,short,int,long,float,double,boolean,char。

三.AIDL的简单使用

使用方法比较方便,直接在main目录下new一个就可以了:

新建完之后要build一下,不然没有接口类使用:

复制代码
interface IMyAidlInterface {
    String getString();
    
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
}

接着新创建一个服务,也是new出来(第一张图的Service处)

然后在清单文件将这个Service指定进程:(进程名字自定义,但前面要加个点,不然apk安装不上)

复制代码
<application
 
        ...
 
        <service
 
            ...
 
            android:process=".kang">
        </service>
 
        ...
      
</application>

public class MyService extends Service {
 
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBind();
    }
 
    static class MyBind extends IMyAidlInterface.Stub{
 
        @Override
        public String getString() {
            return "我是AIDL的返回值";
        }
 
        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) {
 
        }
    }
}

在Activity中:

复制代码
public class MainActivity5 extends AppCompatActivity {
 
    IMyAidlInterface myAidlInterface;  //AIDL
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.button);
 
        btn.setOnClickListener((v) -> {
            Intent intent = new Intent(this, MyService.class);
            startService(intent);
            bindService(intent, mConnection, BIND_AUTO_CREATE);
        });
    }
 
    public ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myAidlInterface = IMyAidlInterface.Stub.asInterface(service);
            try {
                String str = myAidlInterface.getString();
                Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onServiceDisconnected(ComponentName name) { }
    };
}

这样在点击按钮后就会启动一个新进程服务,然后通过AIDL进行跨进程通信。

AIDL是安卓开发中实现跨进程通信的一种机制,通过定义接口和使用AIDL文件生成的Java类,可以方便地在不同应用程序之间进行方法调用和数据传输。这对于需要将功能模块拆分到不同进程的复杂应用程序或多个应用程序之间的协作非常有用。

相关推荐
野生的码农13 小时前
码农的妇产科实习记录
android·java·人工智能
王正南13 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机
撩得Android一次心动13 小时前
Android Jetpack 概述
android·android jetpack
JinBeen13 小时前
sourcetree下码云gitee的ssh经常失效问题
android·gitee·ssh
帅得不敢出门14 小时前
Android各芯片平台日志打开及获取
android
极客小云14 小时前
【Android Gradle 构建常见报错及解决方法大全】
android·运维开发
Just_Paranoid15 小时前
【TaskbarDelegate】屏蔽上滑返回桌面手势功能
android·systemui·navigation·launcher·gesture
赛恩斯15 小时前
asfp 如何导入并使用aosp13
android
诸神黄昏EX15 小时前
Android Safety 系列专题【篇三:Secure Boot机制】
android
李坤林16 小时前
Android Binder 详解(4) Binder 线程池
android·java·binder