IPC 机制---多线程模式

在Android中最有特色的进程间通信方式就是Binder了,通过Binder可以轻松地实现进程间通信。除了Binder,Android还支持Socket,通过Socket也可以实现任意两个终端之间的通信,当然同一个设备上的两个进程通过Socket通信自然也是可以的。

多进程的情况分为两种:

一、一个应用因为某些原因自身需要采用多进程模式来实现。
二、当前应用需要向其他应用获取数据。

Android中的多进程模式,通过给四大组件指定android:process属性,我们可以轻易地开启多线程模式。

在Android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process属性,除此之外没有其他方法,也就是说我们无法给一个线程或者一个实体类指定其运行时所在的进程。(非常规方法)通过JNI在native层去fork一个新的进程。

默认进程的进程名是包名。

进程名以” : “开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,而进程名不以” : “开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一个进程中。

我们知道Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。这里要说明的是,两个应用通过ShareUID跑在同一个进程中的是有要求的,需要这两个应用有相同的SharedUID并且签名相同才可以。在这种情况下,它们可以互相访问对方的私有数据,比如data目录、组件信息等,不管它们是否在同一个进程中。当然如果它们跑在同一个进程中,那么除了能共享data目录、组件信息,还可以共享内存数据,或者说它们看起来像是一个应用的两个部分。

Android为每个应用分配一个独立的虚拟机,或者说为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问一个类的对象会产生多份副本。

所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败。

不同进程的组件的确会拥有独立的虚拟机、Application以及内存空间。

多进程会造成如下几个方面的问题:

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

虽然说不能直接地共享内存,但是通过跨进程通信我们还是可以实现数据交互。实现进程通信的方式很多,比如通过Intent来传递数据,共享文件和SharedPreferences,基于Binder的Messenger和AIDL以及Socket等。

IPC中的一些基础概念,主要包含三方面内容:Serializable接口、Parcelable接口以及Binder,只有熟悉这三方面的内容后,我们才能更好地理解跨进程通信的各种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值