IPC机制

IPC:Inter-Process Communication

http://www.jianshu.com/p/2ab103e32456

简介:
IPC机制_第1张图片
简介
使用场景:
IPC机制_第2张图片
使用场景
开启多进程:

1、在Android中使用多进程只有一种方法,四大组件在AndroidMenifest中指定android:process属性
2、另外一种JNI在native层fork一个新的进程,属于特殊情况,暂不考虑。

一个APP开启多进程造成的问题:

1、静态成员和单例模式完全失效。
2、线程同步机制完全失效。
3、SharedPreferences的可靠性下降。
4、Application会多次创建。

序列化:

1、方式:Serializable(java方式,声明serialVersionUID为了反序列化,没有则无法反序列化成功,序列化是为了保存数据),Parcelable(android方式,效率高,占用内存少,稍微麻烦,首选)
2、作用:通过Intent和Binder传输对象数据时需要使用Parcelable或Serializable。

Binder

1、具体使用可网上搜索
2、从IPC的角度来说,Binder是Android的一种跨进程的通讯方式,主要是通过代理来实现
3、从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager、等等)和ManagerService的桥梁
4、从Android应用层来说,Binder是客户端与服务端通讯的媒介
5、在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中普通的Service的Binder不涉及进程间通讯;而Messenger的底层其实就是AIDL。
6、Binder可自动生成:AIDL可以写aidl文件(IXXManager.java为自动生成,其内部类Stub为Binder文件);也可以自己编写Binder文件(首先声明一个AIDL性质的接口,是需要集成IInterface接口即可,然后实现Stub类和Stub类中的Proxy代理类,参考系统生成代码即可。)
7、如果Binder所运行的服务端进程异常终止,即到服务端的Binder连接断裂(称之为Binder死亡),则需要linkToDeath()(设置死亡代理,Binder死亡时会收到通知,此时可重新发起连接请求)和unlinkToDeath()这两个方法。

IPC方式
IPC机制_第3张图片
IPC方式

1、Bundle
Intent中传递Bundle数据
2、文件共享
3、Messenger
底层实现为Binder


IPC机制_第4张图片
Messenger

4、AIDL(Android Interface definition language)
aidl的核心是binder,binder是framework层的核心。实现后可以调用服务端方法,比较自由。但是如果调用服务端方法的客户端在主线程,那么耗时的话会导致客户端ANR(Application Not Responding),可以放在子线程中调用。再者由于服务端的方法本身就运行在服务端的Binder线程池中,所以服务端方法本身就可以执行大量耗时操作。

5、ContentProvider
底层实现也为Binder


IPC机制_第5张图片
ContentProvider

6、Socket,套接字
分为流式套接字和用户数据报套接字两种,分别对应网络的传输控制层中得TCP和UDP协议。TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立需要经过“三次握手”才能完成,为了提供稳定的数据传输功能,其本身提供了超时重传机制,因此具有很高的稳定性;而UDP是无连接的,提供不稳定的单向通信功能,当然UDP也可实现双向通信功能。在性能上,UDP具有更好的小驴,其缺点是不保证数据一定能够正确传输,尤其是在网络拥塞的情况下。

你可能感兴趣的:(IPC机制)