一、IPC通信设定
1、AndroidManifest.xml文件
一个App可以占用多个进程
<service android:name=".MyService"
android:process=":remote">// 独立一个进程取名remote(远程)
Android每个进程都有一个VM
二、IBinder接口
1、使用Java Interface定义的接口,用于跨进程调用
Android框架的IPC沟通依赖单一的IBinder接口,客户端调用IBinder接口的transact(业务)函数,透过IPC机制而调用远程的onTransact函数
2、Android源码中,Java层的IBinder接口定义于IBinder.java代码的文档里
public interface IBinder{
// code编码 Parcel(包裹)传出的数据 返回的数据
public boolean transact(int code, Parcel data, Parcel replay, int flags) throws RemoteException
}
3、IBinder两个实现类
Binder和BinderProxy
IBinder ---> BinderProxy(代理)
------------------------IPC机制
IBinder ---> Binder
4、基本流程
Client端BinderProxy
|
java ---> transact()(JNI本地模块的transact()函数) ---> Binder Driver驱动服务
|
--------------------------Linux转址-----------------
|
Service端Binder
<-- init()调用java -->
c/c++ ---> execTransact() ---> onTransact() ---> IOC(实现类实现onTransact())