Android AIDL接口

devtools/2024/11/13 10:11:38/

一.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 {@Overridepublic IBinder onBind(Intent intent) {return new MyBind();}static class MyBind extends IMyAidlInterface.Stub{@Overridepublic String getString() {return "我是AIDL的返回值";}@Overridepublic void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) {}}
}

 在Activity中:

public class MainActivity5 extends AppCompatActivity {IMyAidlInterface myAidlInterface;  //AIDL@Overrideprotected 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() {@Overridepublic 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();}}@Overridepublic void onServiceDisconnected(ComponentName name) { }};
}

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

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


http://www.ppmy.cn/devtools/6466.html

相关文章

XiaodiSec day028 Learn Note 小迪渗透学习笔记

XiaodiSec day028 Learn Note 小迪渗透学习笔记 记录得比较凌乱&#xff0c;不尽详细 day 28 还是 sql 注入 知识点 提交方式的注入 在 php, spring boot, flask 都有相关的提交方式 提交方式的注入 数据以某种方式提交到后端 数据大小和数据类型和提交方式有关 如身份…

uniapp之消除图片的空白占用空间

我们在使用uniapp开发的过程中一定会遇到一个情况就是我们加载的图片总有一点空白出现在不该出现的地方代码如下 <view style"background:#ff0000;"><image style"width:100%;"src"https://t7.baidu.com/it/u1819248061,230866778&fm19…

安卓广播发送接收流程

本文基于Andorid 11。 一、registerReceiver registerReceiver(new MyRecevier(), new IntentFilter("com.example.broadcast"));动态注册广播接收器&#xff0c;参数&#xff1a;BroadcastReceiver, IntentFilter。 <receiver android:name".MyReceiver&…

ubuntu在xshell中使用快捷方式操作命令,减少命令行的数入量

第一步 第二步 然后无脑确定 第三步 在xshell的显示方式 方式一 这样就会在每个窗格中进行显示 方式二 效果显示–> 这种窗格的显示是全局的 然后你双击这个process就会自动把命令打在命令行上&#xff0c;减少你的输入量

基于改进遗传算法的配电网故障定位(matlab代码)

1 主要内容 该程序复现文章《基于改进遗传算法的配电网故障定位》&#xff0c;将改进的遗传算法应用于配电网故障定位中, 并引入分级处理思想, 利用配电网呈辐射状的特点, 首先把整个配电网划分为主干支路和若干独立区域, 再利用该算法分别对各独立区域进行故障定位, 然后进行…

pdf做批注编辑工具 最新pdf reader pro3.3.1.0激活版

PDF Reader Pro是一款功能强大的PDF阅读和编辑工具。它提供了多种工具和功能&#xff0c;帮助用户对PDF文档进行浏览、注释、编辑、转换和签名等操作。以下是PDF Reader Pro的一些主要特色&#xff1a; 最新pdf reader pro3.3.1.0激活版下载 多种查看模式&#xff1a;PDF Reade…

海外云手机为什么适合社媒运营?

如今&#xff0c;社媒营销如果做得好&#xff0c;引流效果好的账号&#xff0c;可以用来带货变现&#xff0c;而外贸、品牌出海也同样都在做社媒营销&#xff0c;Tik Tok、facebook、ins等热门的海外社媒平台都是行业密切关注的&#xff0c;必要的时候&#xff0c;大家会使用海…

Linux进阶--文本处理grep、sed、awk命令

目录 一、grep &#xff08;1&#xff09;用文件查找 二、正则表达式 三、sed命令 四、awk命令 grep、sed、awk可以称作linux里的三驾马车 一、grep grep&#xff1a;一种强大的文本搜索工具&#xff0c;它能使用正则表达式匹配模式搜 索文本&#xff0c;并把匹配的行打…