认识进程与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()函数

 

posted @ 2015-11-05 14:46  风吹兰花香  阅读(329)  评论(0)    收藏  举报