Binder通信简介:

  Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等,android应用程序理所当然可以应用JAVA的IPC机制实现进程间的通信,但我查看android的源码,在同一终端上的应用软件的通信几乎看不到这些IPC通信方式,取而代之的是Binder通信。Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。 Binder通信是通过linux的binder driver来实现的,Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。

  Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口,系统中有一个进程管理所有的system service,Android不允许用户添加非授权的System service,当然现在源码开发了,我们可以修改一些代码来实现添加底层system Service的目的。对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一个 ActivityManagerService管理JAVA应用层所有的service创建与连接(connect),disconnect,所有的 Activity也是通过这个service来启动,加载的。ActivityManagerService也是加载在Systems Servcie中的。

  Android虚拟机启动之前系统会先启动service Manager进程,service Manager打开binder驱动,并通知binder kernel驱动程序这个进程将作为System Service Manager,然后该进程将进入一个循环,等待处理来自其他进程的数据。用户创建一个System service后,通过defaultServiceManager得到一个远程ServiceManager的接口,通过这个接口我们可以调用 addService函数将System service添加到Service Manager进程中,然后client可以通过getService获取到需要连接的目的Service的IBinder对象,这个IBinder是 Service的BBinder在binder kernel的一个参考,所以service IBinder 在binder kernel中不会存在相同的两个IBinder对象,每一个Client进程同样需要打开Binder驱动程序。对用户程序而言,我们获得这个对象就可以通过binder kernel访问service对象中的方法。Client与Service在不同的进程中,通过这种方式实现了类似线程间的迁移的通信方式,对用户程序而言当调用Service返回的IBinder接口后,访问Service中的方法就如同调用自己的函数。

----------------------------- 好像csnd博客浏览量比百度博客的少很多啊,呵呵

更多相关文章

  1. Android框架揭秘读书笔记
  2. Android(安卓)应用程序获得系统权限
  3. AIDL实现Android的进程通信
  4. Android启动过程深入解析
  5. android dom方式创建xml
  6. Android中的几种网络请求方式详解
  7. Android(安卓)自动编译、打包生成apk文件 、命令行方式
  8. Android初级-Android(安卓)日志输出和Debug跟踪,常用控件(中),资源
  9. 10天学通Android开发(7)-数据存储

随机推荐

  1. Android(安卓)Service 测试
  2. Glossary of Android
  3. Android:ADT 22.6..0
  4. Download Provider
  5. FrameLayout.xml
  6. Android(安卓)Activity 测试
  7. 【转】Android(安卓)JNI实例
  8. 手把手教你绘制Android粘性果冻动画组件
  9. android studio 全屏显示
  10. AndroidManifest.xml 网络权限