模块式网站制作,网站开发会什么,交互网站开发培训,启东网站建设Android为什么使用Binder#xff1f;用 Linux原有的IPC不行吗#xff1f; 本人今年参加了很多面试#xff0c;也有幸拿到了一些大厂的offer#xff0c;整理了众多面试资料#xff0c;后续还会分享众多面试资料。 整理成了面试系列#xff0c;由于时间有限#xff0c;每天…Android为什么使用Binder用 Linux原有的IPC不行吗 本人今年参加了很多面试也有幸拿到了一些大厂的offer整理了众多面试资料后续还会分享众多面试资料。 整理成了面试系列由于时间有限每天整理一点后续会陆续分享出来感兴趣的朋友可关注收藏 1从性能角度考虑 Binder传输只需要一次拷贝使用管道、消息队列、Socket需要两次共享内存方式一次内存拷贝都不需要。从性能角度来说Binder性能仅次于共享内存可共享内存使用复杂。
2从稳定性角度考虑 Binder是基于C/S架构的Client端有什么需求直接发送给Server端去完成架构清晰明朗Server端与Client端相对独立稳定性较好而共享内存实现方式复杂没有客户与服务端之别 需要充分考虑到访问临界资源的并发同步问题否则可能会出现死锁等问题从这稳定性角度看Binder架构优越于共享内存。
3从安全性角度考虑 传统Linux IPC的接收方无法获得对方进程可靠的UID/PID从而无法鉴别对方身份完全由上层协议来确保。
Android为每个安装好的应用程序分配了自己的UID故进程的UID是鉴别进程身份的重要标志前面提到C/S架构Android系统中对外只暴露Client端Client端将任务发送给Server端Server端会根据权限控制策略判断UID/PID是否满足访问权限目前权限控制很多时候是通过弹出权限询问对话框让用户选择是否运行。Android 6.0也称为Android M在6.0之前的系统是在App第一次安装时会将整个App所涉及的所有权限一次询问只要留意看会发现很多App根本用不上通信录和短信但在这一次性权限权限时会包含进去让用户拒绝不得因为拒绝后App无法正常使用而一旦授权后应用便可以胡作非为。
针对这个问题google在Android M做了调整不再是安装时一并询问所有权限而是在App运行过程中需要哪个权限再弹框询问用户是否给相应的权限对权限做了更细地控制让用户有了更多的可控性
传统IPC只能由用户在数据包里填入UID/PID另外可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开放的无法建立私有通道。从安全角度Binder的安全性更高。