Android特有Binder与IPC机制原理初探,看完应该理解一些些。

原创 2016年10月19日 18:55:14

前言概述

Binder网上有很多文章要么讲的深入全是LInux内核指令C语言分析,要么空洞无脑。这里个人理解整理如下。

  • 什么是Binder:

1.Binder是一个类实现了IBinder接口,目的就是为了IPC服务而存在的。进程间通信的必须依赖的东西。

2.Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager…….)和相应的系统底层ManagerService的桥梁。

3.Binder本意就是一个驱动程序,提供设备文件在Framework/dev/binder。

  • 什么是IPC(Inter-Process Communication)

1.IPC是跨进程(由于Andoird每个APP都至少是拥有一个进程)也可理解跨应用间通信,可以对比(Handler是线程间通信的桥梁).

2.Android每个应用都单独拥有一个Pid(进程ID),相互调用数据就需要IPC,但是Adroid OS 不允许我们直接像对象一样调用方法获取数据,所以我们需要Binder驱动IPC通信。

3.Binder的IPC与一般IPC的区别

我们都知道且最常用的Socket也是IPC通讯,通用的网络通讯方式,但是建立Socket连接销毁都有一定的开销;消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,数据传递至少有两次拷贝过程,所以对于移动应用效率不行,考虑IPC之间的安全问题,以及Binder支持1对多,Android OS就使用自己的驱动Binder来服务IPC;

理解IPC需要关注的几个点

  • ServiceManager
    系统服务和我们自定义服务可以存放的地点,内部HashMap(String, IBinder)存放Binder,通过这个类我们可以获取到系统提供的服务流程大概如此

  • 为什么通过Binder就能够跨进程了呢?
    首先我们的Android OS 进程数据共享图
    这里写图片描述
    IOCTL就是用户空间与内核交互数据的驱动函数。
    通过这一点我们就肯定知道Binder是肯定能够在内核空间与用户空间之间传递数据才能够实现我们需要IPC,下图也就是我们Binder干的事情;
    这里写图片描述
    这也使得我们实现Aidl来进行跨进程语言自定义类型的时候为什么要序列化对象,才能够实现IPC通信,因为底层并不认识JAVA对象,需要parcelable序列化后,实现writeToParcel与readFromParcel,来实现IPC通信。Parcel就是我们进程间数据保存的一个容器。,把数据写入到Parcel,Binder对其解析送到远程服务端,由远程服务端再次解析执行对应的函数,又通过Binder来返回到用户进程.

怎么使用系统服务呢?

//获取WindowManager服务引用
WindowManager wm = (WindowManager)getSystemService(getApplication().WINDOW_SERVICE);  //AudioService 》AudioManager 
// NotificationManagerService》 NotificationManager
//

其实JAVA中这部分的服务大部分都有一个供用户空间使用的manager类,这就是一个最正常的RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到系统服务进程中对应的SystemManagerService中对应的方法,并将结果再通过binder带回。

总结

本文只是对Binder机制的一些个人理解总结,并没有深入研究,
可参考老罗blog,有时间自己还是要从源码去深入理解下。
如何在最新版AS2.2版本下使用Aidl创建自定义类型的远程服务,见下篇Blog!

版权声明:欢迎你来转载,不过请带个此Blog链接!

相关文章推荐

Android多进程IPC机制——binder原理探索

说到进程,刚开始学Android的时候无法理解进程和线程的区别,我的理解是:线程就是工作台,完成一件工艺品需要多道工序(可同时操作此作品,其中就涉及到线程安全),而进程是车间,当工厂越来越大,你需要的...
  • verymrq
  • verymrq
  • 2017年06月06日 17:50
  • 101

Android进程间的通信 - IPC(机制)Binder的原理和源码阅读

1. 概述  当初决定分享内涵段子的这个项目我有些担心,担心很多东西心里虽然有了轮廓和细节。但是如果涉及到的东西比较多,那么就有可能没办法去讲太多的细节,况且某些哥们还不会C和C++,所以如果的确觉得...

Android IPC机制Binder简要介绍

  • 2016年07月16日 07:37
  • 399KB
  • 下载

深入理解android之IPC机制与Binder框架

[android之IPC机制与Binder框架] [Binder框架、Parcel、Proxy-Stub以及AIDL]   Abstract [每个...

Android的IPC机制-Binder

  • 2012年05月26日 14:39
  • 462KB
  • 下载

Android的IPC机制——Binder

  • 2011年10月23日 18:50
  • 360KB
  • 下载

深入理解android之IPC机制与Binder框架

binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无...

深入理解 Android 的 IPC 机制--------Binder

在android中,,应用程序虽然是以独立的进程来运行的,但相互之间还是需要通信。。比如,,我们的应用程序 和后台服务往往会运行不同的进程当中,,各自有这独立内存地址空间,,,但是又要彼此互相合作,,...

Android IPC机制之 理解Binder

服务端 IBinder类的创建Binder是Android一个类实现了Ibinder接口,Binder也是Android跨进程通信的一种方式,Binder是连接Android各种manager和Man...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android特有Binder与IPC机制原理初探,看完应该理解一些些。
举报原因:
原因补充:

(最多只允许输入30个字)