Android AIDL 创建的DEMO

使用AIDL创建一个demo 主要参考文件, 以及其他地址

Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers

绑定服务概览 | Android 开发者 | Android Developers

Android 接口定义语言 (AIDL)

Android 接口定义语言 (AIDL) 与您可能使用过的其他接口语言 (IDL) 类似。您可以利用它定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。在 Android 中,一个进程通常无法访问另一个进程的内存。因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象。编写执行该编组操作的代码较为繁琐,因此 Android 会使用 AIDL 为您处理此问题。

注意: 只有在需要不同应用的客户端通过 IPC 方式访问服务,并且希望在服务中进行多线程处理时,您才有必要使用 AIDL。如果您无需跨不同应用执行并发 IPC,则应通过实现 Binder 来创建接口;或者,如果您想执行 IPC,但 需要处理多线程,请使用 Messenger来实现接口。无论如何,在实现 AIDL 之前,请您务必理解绑定服务

上面是官网对AIDL的描述,下面说了使用AIDL创建一个简单的dmeo

1 选中自己包名

2 点击鼠标右键 之后选择new ,之后再选择AIDL 在点击AIDL File

之后自己取一个名字点击finish

3 之后android studio 会自动生成一个AIDL包如下, 下面文件是自己刚才文件的,报名时工具生成

一般里面默认有一个方法,自己有添加了几个,1个void 和2个有返回值的方法,具体如下

复制代码
// Declare any non-default types here with import statements

interface Information {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    // 自己定义的几个方法
    void Infor(String name ,int age);

    boolean isActive();

    List<String> getList();

}

4 之后再点击工具栏上的Build

5 选择里面的Make Project

之后自己在app下面的build里面查看生成的文件,如果文件生成了,就可以接着下面的工作了

下面图是 Make Project 生成的

AIDL文件生成之后下面写代码

创建一个Service

复制代码
public class InforService extends Service {

    private final IBinder iBinder = new Information.Stub() {
        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
            Log.d("******InforService", "Received data: " + anInt + ", " + aLong + ", " + aBoolean + ", " + aFloat + ", " + aDouble + ", " + aString);
        }

        @Override
        public void Infor(String name, int age) throws RemoteException {
            Log.d("******infor", "姓名=" + name + "," + "年龄=" + age);
        }

        @Override
        public boolean isActive() throws RemoteException {
            return true;
        }

        @Override
        public List<String> getList() throws RemoteException {
            return Arrays.asList("A", "B", "C", "D");
        }
    };

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d("******Bind service:", String.valueOf(intent));
        return iBinder;
    }
}

之后再AndroidManifest 文件里面注册下刚才创建的服务

复制代码
            <service
            android:name="com.hly.aidldemo.InforService"
            android:enabled="true"
            android:exported="true" />

最后在Main里面使用ServiceConnection来获取AIDL连接成功和失败的方法

在连接成功的方法里面使用asInterface获取AIDL里面的方法

下面是自己放2个void方法里面传递一些参数,然后获取2个有返回值的方法,如下

复制代码
public class MainActivity extends ComponentActivity {

    private final ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Information information = Information.Stub.asInterface(service);
            try {
                //传递参数
                information.basicTypes(18,18L,true,18.88f,18.88,"HI");
                information.Infor("张三丰",180);
                //获取参数
                Log.d("******isActive", String.valueOf(information.isActive()));
                Log.d("******getList", String.valueOf(information.getList()));
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d("******onServiceDisconnected,","onServiceDisconnected:"+name);
        }
    };

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

        Intent intent = new Intent(this,InforService.class);
        bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
    }
}

这样一个简答的AIDLdemo 流程就创建完成了。

demo 地址,上传到码云上了,点击可以下载看看

相关推荐
青春给了狗12 分钟前
Android 14 修改侧滑手势动画效果
android
CYRUS STUDIO18 分钟前
Android APP 热修复原理
android·app·frida·hotfix·热修复
火柴就是我1 小时前
首次使用Android Studio时,http proxy,gradle问题解决
android
limingade1 小时前
手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段
android·智能手机·电脑·蓝牙电话·电脑打电话
浩浩测试一下2 小时前
计算机网络中的DHCP是什么呀? 详情解答
android·网络·计算机网络·安全·web安全·网络安全·安全架构
青春给了狗3 小时前
Android 14 系统统一修改app启动时图标大小和圆角
android
pengyu4 小时前
【Flutter 状态管理 - 柒】 | InheritedWidget:藏在组件树里的"魔法"✨
android·flutter·dart
居然是阿宋5 小时前
Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
android·开发语言·kotlin
凉、介5 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci
小贾要学习7 小时前
【C++】继承----下篇
android·java·c++