3.IPC 机制(一)

来源:互联网 发布:各种网络协议的区别 编辑:程序博客网 时间:2024/06/03 03:09
IPC:Inter-Process Communication,含义为进程间通信,或者跨进程通信,是指两个进程之间进行数据交换的过程。

1.进程和线程是截然不同的概念。
进程:进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。
线程:线程是CPU调度最小单元,同时线程是一中年有限的系统资源。
一个进程中可以只有一个线程,即主线程,在android里面主线程也叫做UI线程.一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系。

2.多进程模式
在android中使用多进程只有一个方法,那就是给四大组件,在androidmenifest中指定android:process属性,除此之外没有其他方法,也就是说我们无法给一个线程或者一个实体类指定其运行时所在的进程。其实还有另一种非常规的多进程方法,那就是通过JNI在native层去fork一个新的进程,但是这种方法属于特殊情况,不考虑。

进程中
:remote
.remote
是有区别的:“:”的含义是指要在当前的进程名前面附加上当前的包名,这是一种简写的方法。
而” 。“是一种完整的命名方式,不会附加报名信息;其次,进程名以“:”开头的进程属于当前应用的私有进程,
其他应用的组件不可以和它跑在同一进程中,而进程名不易“:”开头的进程属于全局进程,其他应用可以通过ShareUID
方式可以和它跑在同一个进程中。

android系统回味每个应用分配一个唯一的UID,具有相同的UID的应用才能共享数据。这里要说明的是,两个应用通过
ShareUID跑在同一个进程是有要求的,需要这两个应用有相同的ShareUID并且签名相同才可以,在这种情况下,它们可以互相访问对方私有数据。当然如果它们跑在同一个进程中,设置还可以共享内存数据,或者说它们看起来就像是一个应用的两个部分

2.2多进程模式的运行机制
需注意:android为每一个应用分配了一个独立的虚拟机,或者说为每个经常都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就会导致在不同的虚拟机中访问同一类的对象会产生多份副本。

!!!记住:所有运行在不同进程中的四大组件,只要他们之间需要通过内存来共享数据,都会共享失败,这也是多进程带来的主要影响。

一般来说,使用多进程会造成如下几方面的问题:
1.静态成员和单列模式完全失效。
2.线程同步机制完全失效。
3.SharedPreferences的可靠性下降。
4.Application会多次创建。

1.2是因为前面说过的问题,第三个问题是因为SharedPreferences不支持两个进程同事去执行写操作,否则会导致一定几率的数据丢失,这是因为SharedPreferences底层是通过读/写XML文件实现的,并发写显然是有可能出现问题的,甚至并发读/写都有可能出现问题。4,当一个组件跑在一个新的进程中的时候,由于系统要正在创建新的进程同时分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程。

所以:一个应用间的多进程:它就相当于两个不同的应用采用了SharedUID的模式,这样能够更加直接地理解多进程模式的本质。


0 0
原创粉丝点击