AIDL

本文深入探讨Android中AIDL(Android Interface Definition Language)的概念及其在进程间通信(IPC)中的应用。解析了AMS(ActivityManagerService)、Binder机制以及序列化在IPC中的作用,对比了Parcelable与Serializable的性能和适用场景,详细讲解了Client与Service如何通过Binder实现通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AIDL

  • Android 接口通信语言;

  • AMS:ActivityManagerService系统服务——四大组件管理服务

  • android是消息驱动机制;

  • Adnroid ipc通讯是通过binder进行通信,按照binder的规矩去进程通信,且binder代码多,而aidl则是帮助我们来写代码;

  • 需要序列化——parcelable

    • 由于不同的进程有着不同的内存区域,并且它们只能访问自己的那一块内存区域,所以我们不能像平时那样,传一个句柄过去就完事了——句柄指向的是一个内存区域,现在目标进程根本不能访问源进程的内存,那把它传过去又有什么用呢?所以我们必须将要传输的数据转化为能够在内存之间流通的形式。这个转化的过程就叫做序列化与反序列化。

      简单来说是这样的:比如现在我们要将一个对象的数据从客户端传到服务端去,我们就可以在客户端对这个对象进行序列化的操作,将其中包含的数据转化为序列化流,然后将这个序列化流传输到服务端的内存中去,再在服务端对这个数据流进行反序列化的操作,从而还原其中包含的数据——通过这种方式,我们就达到了在一个进程中访问另一个进程的数据的目的。

    • Parcelable和Serializable的作用、效率bai、区别及选择:
      1、作用Serializable的作用是为了du保存对象的属zhi性到本地文件、dao数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。从上面的设计上我们就可以看出优劣了。
      2、效率及选择Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。

  • Client->bindService->Service返回IBinder->Client拿到Binder可以像同进程一样调用;(搞清楚)

  • aidl自动生成代码

    • 数据 Clien—Service
    • proxy(发送数据,进站口)和Stub(接收数据,出站口)

在这里插入图片描述

  • service和client的接口方法一样,因此将方法写成code,通过code来访问。性能提升onTransact

在这里插入图片描述

  • 类加载机制

  • binder service 跨了6次进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值