美文网首页
IBinder接口及其实现

IBinder接口及其实现

作者: JasonHwang | 来源:发表于2020-01-17 16:29 被阅读0次

1、IPC通信

当我们启动某一支应用程序(App)时,android系统里的Zygote服务孵化(Fork)一个新的进程(progress)给它,然后将它(App)加载到这个新诞生的进程里。一个进程是一个独立的执行空间,不会被正在其他进程里的程序锁侵犯。跨越两个进程之间的通信称为跨进程通信 IPC。

2、进程

每个进程都有一个虚拟机(VM)对象,用来执行java代码,也引导JNI本地程序的执行实现Java与C/C++的沟通。一个进程只摆放一支App,一支App可以占用多个进程。

每个进程诞生时,都会产生一个主线程(Main Thread)一个Looper类对象一级一个MQ(Message Queue)数据结构。每当主线程做完事情就会执行Looper类,此时,不断观察MQ的动态。

3、IBinder接口及其实现

ICP通信主要通过IBinder接口的transact()函数实现。IBinder接口的实现Binder和BinderProxy。

IBinder接口源码

Binder --- service端  ; BinderProxy --- client端。

3.1 Binder基类的主要目的是支持跨进程调用Service,也就是让远程的Client可以跨进程调用某个Service

Binder基类源码 Binder基类方法UML图

• transact()函数--- 用来实现IBinder的transact()函数接口。

• execTransact()函数--- 其角色与transact()函数是相同的,只是这是用来让C/C++本地程序来調用的。

• onTransact()函数--- 这是一个抽象函数,让应用子类来重写(Override)的。上述的transact()和execTransact()两者都是調用onTransact()函数      来实现反向調用(IoC, Inversion ofControl)的。

• init()函数--- 这是一个本地(Native)函数,让JNI模块来实现这个函数。Binder()构造函数(Constructor)会調用这个init()本地函数。

3.2 BinderProxy :在Client进程里,担任Service端的分身(Proxy)

由于跨进程沟通时,并不是从Java层直接沟通的,而是透过底层的Binder Driver驱动来沟通的,所以Client端的Java类别(如Activity)必须透过BinderProxy分身的IBinder接口,转而調用JNI本地模块来衔接到底层Binder Driver驱动服务,进而調用到正在另一个进程里执行的Service。

BinderProxy源码

当Client透过IBinder接口而調用到BinderProxy的transact()函数,就調用到其 JNI本地模块的transact()函数,就能进而衔接到底层Binder Driver驱动服务了。

相关文章

  • IBinder接口及其实现

    1、IPC通信 当我们启动某一支应用程序(App)时,android系统里的Zygote服务孵化(Fork)一个新...

  • 14 AIDL

    AIDL Android 接口定义语言定义AIDL接口创建.aidl文件,实现iBinder,向客户端公开该接口A...

  • Android进程间通信(2)Binder

    介绍 Binder是一个实现了IBinder接口的类,它是由IBinder定义的远程过程调用机制的核心,即Andr...

  • Binder 例子

    Binder具有被跨进程传输的能力是因为它实现了IBinder接口。系统会为每个实现了该接口的对象提供跨进程传输,...

  • Android跨进程通讯机制Binder 之我的理解

    IBinder接口: 代表一种跨进程传输的能力,实现这个接口,就能将这个对象进行跨进程传递 transact()...

  • Proxy_Stub设计模式

    1、背景 Android的IPC框架仰赖单一的IBinder接口。此时Client端调用IBinder接口的tra...

  • Android Framework层Binder机制

    Framework层Binder相关接口: IInterface接口: IBinder接口: AIDL简易示例: ...

  • Activity和Service的跨进程双向通信机制

    对于不同进程中的Activity和Service,要实现IPC(跨进程通信),其实就是通过IBinder接口,其中...

  • 【Android】深入解析 Binder 源码

    前言:Binder 是什么?从类的角度来说,它是实现了 IBinder 接口的 Binder 类;从机制角度来说,...

  • AIDL与Binder浅析

    直观地说,Binder是Android的一个类,实现IBinder接口,可以重点关注transact方法和onTr...

网友评论

      本文标题:IBinder接口及其实现

      本文链接:https://www.haomeiwen.com/subject/acvczctx.html