安卓多进程通信初探

229 阅读1分钟

安卓开启多线程方式

android中四大组件增加android:process属性即可开启多进程。

“:”的含义是指在当前的进程名前面附加上当前的包名,并且以“:”的进程属于当前应用的私有进程,其他应用组件不可以和它跑在同一个进程中。不以“:”开头的进程属于全局进程,其他应用通过ShareUID方式和它跑在同一进程中。

AIDL通信分析

主要实现思路

客户端:

绑定服务器

服务端:

完成AIDL接口工作

根据一个小demo分析

  • 服务端

build 服务端项目以后gen目录下会生成IBookManager.java文件。 复制到客户端去。

  • 客户端

客户端将一本bookName为“xiaofang”的书发送服务端以后获得bookName为“xiaoxiao”的书

DESCRIPTOR

binder的唯一标识

asBInder

返回Binder对象

asInterface(android.os.IBinder obj)

将服务器的Binder转换成客户端的所需要的AIDL接口对象,这种转换过程是区进程的,如果客户端和服务端处于同一进程,返回的是Sub对象,否则返回的Sub.Proxy的对象

onTransact

运行于服务端中的Binder线程池中,客户端发起的跨进程处理通过系统底层封装后由该方法处理;如果返回false,客户端请求会失败。

ps:感谢任玉刚的艺术探索书籍,动手实践得到的知识积累