IPC进程间通信(开发艺术探索)

2018-12-17  本文已影响0人  云木杉

使用多进程造成的问题

进程间通信方式

序列化与反序列化

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。

简单地说,“序列化”就是将运行时的对象状态转换成二进制,然后保存到流、内存或者通过网络传输给其他端。

Parcelable

方法 功能 标记位
createFromParcel(Parcel in) 从序列化后的对象中创建原始对象
newArray(int size) 创建指定长度的原始对象数组
User(Parcel in) 从序列化后的对象中创建原始对象
writeToParcel(Parcel dest, int flags) 将当前对象写入序列化结构中,其中flags标识有两种值,0或者1(参见右侧标记位),为1时标识当前对象需要作为返回值返回,不能立即释放资源,几乎所有情况为0。 PARCELABLE_WRITE_RETURN_VALUE
describeContents() 返回当前对象的内容描述,如果含有文件描述符,返回1(参见右侧标记位),否则返回0,几乎所有情况都返回0 CONTENTS_FILE_DESCRIPTOR

aidl生成的类

Binder的唯一标示,一般用当前的Binder的类名表示。

用于将服务端的的BInder对象转换成客户端所需的AIDL接口类型的对象,这种转换过程是区分进程的,如果客户端和服务端位于同一进程,那么此方法返回的就是服务端的Stub对象本身,否则返回的是系统封装好的Stub.proxy对象。

这个方法运行在服务端的BInder线程池中,当客户端发起跨进程请求时,远程请求会通过系统底层封装后交

创建AIDL

AIDL大致流程

*首先创建一个Service和一个AIDL接口,接着创建一个类继承自AIDL接口中的Stub类并实现Stub的抽象方法,在Service的onBind方法中返回这个类的对象,然后客户端就可以绑定服务端Service,建立之后就可以访问远程服务端的方法。

ContentProvider

Socket

虽然看完 还是模模糊糊,总比不看好的多吧

上一篇 下一篇

猜你喜欢

热点阅读