IPC

来源:互联网 发布:安卓好的看书软件 编辑:程序博客网 时间:2024/05/17 18:23

IPC

IPC在android中有多种实现方式,包括bundle,文件,aidl,messenger等,要讲IPC之前先要说一下对象的序列化

数据通信都是需要对象实现序列化的,android的序列化有两种方式Serializable和Parcelable

  1. Serializable是java序列化的实现方式,优点是使用简单,缺点是性能差,需要不断的I/O读写。这种的序列化其实就是把对象通过流的方式写入到文件中,反序列化时再从文件中读。实现Serializable接口都会有常量serialVersionUID的存在,他的左右是作为反序列化时匹配的钥匙,如果没有serialVersionUID我们也可以序列化成功,但是反序列化可能就会出现问题,建议不要删除serialVersionUID常量。
  2. Parcelable是android特有的实现序列化的方式,优点是效率高,缺点是使用复杂。Parcelable中的writeToParcel方法就是实现序列化,new Creator<>()对象实现反序列化

多进程数据传递出现问题的原因:实现多进程的方式很简单,在Androidminefest.xml中添加process标签就可以实现,每个进程都是一个单独的虚拟机,会有单独的内存空间,所以如果一个应用用多进程的方式可以向系统申请更多的内存空间,伴随的问题也出现了,每个进程的内存也是分开的,内存中的数据就无法实现共享。

bundle是通过intent绑定的方式传递,只能传递bundle支持的数据类型,bundle本身实现了Parcelable接口

文件的方式是通过不同进程的读写来实现数据共享,但是如果两个进程同时读写文件就会造成数据出错,因为是不同内存空间所有无法使用线程锁的方式。

messenger的方式是通过binder用message共享数据,服务端新建messenger并绑定一个messagehandler,handler用来接收客户端发来的message,客户端绑定service,service会返回一个binder对象,用binder创建messenger发送message数据

aidl本质上也是用binder的方式实现IPC,系统会通过我们的aidl文件生成一个和aidl同名的java文件,这个类中包含Stub类和Proxy类,实际上Stub类就是Binder,Proxy是用于多进程通信的代理类,直接和客户端交流

0 0
原创粉丝点击