写点什么

Android 面试官:看你简历上写熟悉 -AIDL,说一说 -oneway- 吧

用户头像
Android架构
关注
发布于: 刚刚


?? 自认为无所不知,水平已达应用开发天花板,目前月薪 10k


面试官?:看你简历上写熟悉 AIDL,说一说 oneway 吧


??:oneway 是什么?跟 AIDL 没关系吧,我熟悉 AIDL 指的是使用 AIDL 接口进行跨进程通信。


面试官:AIDL 接口的方法可以用 oneway 修饰符来修饰,了解过这个修饰符的作用吗?


??:可以提高性能吗?我觉得没必要使用,我从没用过,程序也跑的好好的,没出过什么问题。


面试官:好的,回去等通知吧




?? 业余时间经常打游戏、追剧、熬夜,目前月薪 15k


面试官:看你简历上写熟悉 AIDL,说一说 oneway 吧


??:用 oneway 修饰的 AIDL 接口方法,是单向调用,不需要等待另一个进程的返回结果,所以方法的返回类型也只允许是 void.


面试官:怎么理解 "单向调用" ,有了解过它的实现原理吗?


??:由应用进程到服务进程是通过 binder 驱动进行 IPC 通信的,单向的意思应该是应用进程只向 binder 驱动发送一次数据就结束返回,不再等待回复数据;而不用 oneway 修饰的方法需要等待 binder 驱动与服务端通信完后,再回复数据给应用端。


面试官:只向 binder 驱动发送数据吗?binder 驱动有没有回复应用?


??:嗯... 我理解的是既然不需要返回值,所以没有回复吧


面试官:好的,回去等通知吧




??? 坚持每天学习、不断的提升自己,目前月薪 30k


面试官:看你简历上写熟悉 AIDL,说一说 oneway 吧


???:oneway 主要有两个特性:异步调用和串行化处理。异步调用是指应用向 binder 驱动发送数据后不需要挂起线程等待 binder 驱动的回复,而是直接结束。像一些系统服务调用应用进程的时候就会使用 oneway,比如 AMS 调用应用进程启动 Activity,这样就算应用进程中做了耗时的任务,也不会阻塞系统服务的运行。


串行化处理是指对于一个服务端的 AIDL 接口而言,所有的 oneway 方法不会同时执行,binder 驱动会将他们串行化处理,排队一个一个调用。


面试官:有了解过相关的 binder 协议吗?


???:了解过,图会更直观一些,我来画一下图吧,首先是非 oneway 的情况:


![](https://upload-images.jiansh


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


u.io/upload_images/14140248-b26a425748b392ec?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


如果是 oneway 的话,客户端就不需要挂起线程等待:



涉及到的 binder 命令也有规律,由外部发送给 binder 驱动的都是 BC_ 开头,由 binder 驱动发往外部的都是 BR_开头。


面试官:怎么理解客户端线程挂起等待呢?有没有实际占用 CPU 的调度?

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android面试官:看你简历上写熟悉-AIDL,说一说-oneway-吧