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类,可以方便地在不同应用程序之间进行方法调用和数据传输。这对于需要将功能模块拆分到不同进程的复杂应用程序或多个应用程序之间的协作非常有用。

相关推荐
JMchen1237 小时前
现代Android图像处理管道:从CameraX到OpenGL的60fps实时滤镜架构
android·图像处理·架构·kotlin·android studio·opengl·camerax
快点好好学习吧8 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
是誰萆微了承諾8 小时前
php 对接deepseek
android·开发语言·php
Dxy12393102169 小时前
MySQL如何加唯一索引
android·数据库·mysql
冠希陈、10 小时前
PHP 判断是否是移动端,更新鸿蒙系统
android·开发语言·php
晚霞的不甘13 小时前
Flutter for OpenHarmony从零到一:构建《冰火人》双人合作闯关游戏
android·flutter·游戏·前端框架·全文检索·交互
2601_9498333913 小时前
flutter_for_openharmony口腔护理app实战+饮食记录实现
android·javascript·flutter
独自破碎E13 小时前
【滑动窗口+字符计数数组】LCR_014_字符串的排列
android·java·开发语言
stevenzqzq13 小时前
compose 中 align和Arrangement的区别
android·compose
VincentWei9513 小时前
Compose:MutableState 和 mutableStateOf
android