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

相关推荐
千里马学框架19 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台19 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone20 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc20 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui