1、Binder概述

Binder,英文的意思是别针,回形针。表面意思是可以把一些东西“绑”在一起。在android中Binder用于完成进程间的通信(IPC),即把多个进程“别”在一起。比如,普通应用程序可以调用音乐播放服务生提供播放、暂停、停止的功能。

Binder工作在Linux层面,属于一个驱动,只中这个驱动不需要硬件,或者说操作的硬件属于一小段内存。从线程角度上讲,Binder驱动代码运行在内核态,客户端程序调用Binder是通过系统调用完成的。

2、Binder框架

android中的Binder(android内核学习记录)_第1张图片

Binder是一种架构,这种架构提供了服务器接口,Binder驱动,客户端三个模块,如图所示。

1、服务端:一个服务端实际上就是一个Binder类的对象,该对象一旦创建,这就启动一个隐藏的线程。该线程下会接收Binder驱动发送的消息,收到消息后会执行到onTransact()方法,并按照方法的参数执行不同的服务代码。因此,实现Binder服务就必须重载onTransact()方法。

重载onTransact()方法的主要内容是把onTransact()方法的参数转换成服务函数的参数,而onTranscat()参数来源于客户端。因此transact()有固定格式,那么onTranscat()就会有固定格式的输出。

2、Binder驱动。任意一个服务端Binder对象被创建时,同时会在Binder中创建一个mRomote对象。该对象也是Binder类。客户端要访问远程服务时,都是通过mRomote对象。

3、客户端。客户端要想访问远程服务,必须获取远程服务所在的Binder对象中对应的mRomote引用。获取mRomote引用后,就可以调用其transact()方法,而在Binder驱动中,mRomote对象也重载了transact()方法,重载的内容主要包括以下:

  • 以线程间消息通信的模式,向服务端发送客户端传来的参数
  • 挂起当前线程,当前线程正是客户端线程,并等待服务端线程执行完指令服务器函数通知(notify)。
  • 接受到服务端的通知,然后继续执行客户端线程,并返回到客户端代码区。
    从这里可以看出,对应用程序开发人员来说,客户端似乎是直接调用远程服务对应的Binder,而事实上则是通过Binder驱动进行了中转,即产生了两个Binder对象,一个是有服务端,一个是在Binder驱动层。所不同的是Binder驱动中的对象不会再产生额外的线程。

更多相关文章

  1. Android客户端性能优化(魅族资深工程师毫无保留奉献)
  2. (Android design)新闻资讯类android客户端开源拉
  3. Android线程模型和AsyncTask
  4. 【Android和iOS】快速切换到主线程更新UI
  5. android客户端接入新浪、腾讯微博以及人人网
  6. 理解Android UI与线程交互
  7. Android单线程模型

随机推荐

  1. android异步下载图片
  2. Android(安卓)监听电话状态
  3. Android(安卓)获取验证码倒计时
  4. android服务(Service)与广播(Broadcast)
  5. 意见反馈 页面布局的设计
  6. Android(安卓)开机自动启动应用
  7. 利用ContentProvider的添加数据
  8. Android(安卓)Material Design(7) 转场动
  9. android 背景设置
  10. android 监听视频播放完毕