Android 中IPC的面试相关

一、请回答一下Android进程间的通信方式?

 

二、谈谈 AIDL?

        1、定义 AIDLandroid Interface Dialog Launguage , 是一个android 接口 对话语言,
        2、作用是 为了实现进程间之间服务的通信。
        3、实现方式, Service ClientService Service 同时 持有一个 AIDL文件,编译的时候, 会自动变成一个可以引用的Binder子类。 Client 绑定服务成功后, 获取这个子类,可以使用里面的方法。 ServiceonBind 方法里面 返回 这个Binder 类。
        4、内部实现原理 是Binder ,实现了进程之间的通信。

三、谈谈你对 Binder 的理解

性能

  •  socket 作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。
  • 消息队列和管道采用 存储-转发 方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。
  • 共享内存虽然无需拷贝,但控制复杂,难以使用。
  •  Binder 基于 Client-Server 通信模式,传输过程只需一次拷贝,性能较好,效率虽然比共享内存的零次要低,但比管道和 socket 的两次要高。

安全性

        BinderClient-Server 通信模式,为发送方添加 UID/PID 身份,既支持 实名Binder 也支持 匿名Binder ,保证了跨进程通讯的安全。
    

Binder 通信流程

  1. ServiceServiceManager 中注册
  2. Client 想要调用 Service 的方法,需要先获取 Service 对象, ServiceManager 会返回给它一个代理对象,即 Proxy 
  3.  Client 调用 Proxy 的方法, ServiceManager 会帮它调用 Service 对应的方法,并把结果返给它。

Android 中使用 Binder 的场景

ActivityManagerServicePackageManagerServiceWindowManagerServiceXXXManagerService 形式的基本都会用到,一般会在 SystemService 来注册这些系统服务。

其它的如 NotificationCompatSideChannelServiceContentProviderNative 等等,都有引用到。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值