认识进程与IPC架构
1.什么是IPC通信
IPC架构(inter process communication)是跨越两个不同进程的通信,一般而言Android的应用程序的个组件都在同一个进程里执行,这种在统一进程内的通信又称为短程通信。
远程通信:两个组件分别在不同的进程里执行,两者之间是IPC通信,又称为远程通信。
IPC通信的效率:
但我们启动某一个应用程序时,Android系统里的Zygote服务孵化一个新的进程给它,然后将它加载到这个新诞生的进程里。
机遇Linux的安全机制,一级进程的基本特性,如果两个类在同一进程中执行时两者沟通速度会比较快,当在不同的进程中时沟通就会比较慢。
2.复习Android的进程概念
一个进程是一个独立的执行空间,不会被正在其他进程里的程序所侵犯,这种保护方法是Android的重要安全机制。
在Android的进程里,有一个虚拟机的对象,可执行Java代码,也引导JNI本地程序的执行,实现Java和C/C++的沟通
每一个进程:一个VM对象,主线程,MQ(Message Queue)和Looper
Java代码是由MV(虚拟机)执行的,c/c++代码是由cpu执行的
当启动一个apk的时候首先会准备好一个进程,也就是MV,Mq,looper,遮羞都准备好的时候才会把apk加载进来
每一个进程在诞生时,都会诞生一个主线程(Main Thread),以及诞生一个Looper类的对象和一个MQ(Message Queue),数据结构,每当主线程做完事情,就会执行Looper类,此时不断的观察MQ 的动态
主线程最重要的工作就是处理UI画面的事件,每当时间发生时,Android框架会丢失信息到MQ里,主线程看到MQ有新的信息时,就会取出信息,执行完后,就会在执行Looper类,不断的观察MQ的动态。
3.设定IPC 通信--使用清单文件
在清单文件中设置 android:process=”: remote” 那么这个组件就会在另外一个进程中
4.IPC的Binder接口--定义与实现
(1)IBinder接口的定义:
IPC通信依赖IBinder接口,此时Client端调用IBinder接口的trandact()函数,透过IPC机制而调到远方的onTransact()函数。
(2)IBinder接口的实现类
BinderProxy 和 Binder
Binder类的主要函数有:transact() execTransact()这两个都会调用onTransact() (抽象函数,子类可以实现) init()
注:如果是Java和c++代码之间的沟通,c++调用execTransact()然后会自动调用onTransact() Java往c++调用是通过init()方法
如果是Java和Java 通过IBinder调用transact()在自动调用onTransact()
BinderProxy 类
5.IPC通信的三个步骤
1.配对:Activity使用startService()函数来启动service
2.Activity调用bindService()来绑定S额锐策,也就是Activity建立与Service之间的连接(Connection)
3.Activity调用IBinder接口的transact()函数透过底层的Binder Driver 驱动而间接调用到Binder基类的exceTransact()函数,转而调用myBind儿的onTransact()函数
浙公网安备 33010602011771号