您的位置:首页 > 移动开发 > Android开发

初识Android中的IPC

2015-11-05 22:42 369 查看
IPC全称为Inter-Process Communication,进程间通信,在Android系统中每个应用程序都是在自己独立的一个进程中跑的,系统为每个进程分配了各自的虚拟机,这样每个进程都有独立的内存,保证app之间互不干扰。

一般情况下,我们在开发中使用多进程技术都是在一个app中,就是让指定的组件(承担耗时、占内存的任务)运行在另外一个进程当中,当然也可以使用Service,但是Service默认是运行在主进程的主线程当中的,这样会使app的可用内存减少。而对于新开一个进程,我们的app相当于有两个进程,新开的那个进程不会影响到我们的主进程,比如内存使用方面,Android系统为每一个app运行是分配的内存都是特定的,当然也和不同的手机也是有关的。还有就是当用户按了home键,把我们的app处于后台时,一旦用户之后打开了很多其他应用,系统就会开始杀掉一些内存占用高的进程(这只是系统在回收进程逻辑的一点而已),而当我们把一个app分离出两个进程时,被杀的几率相对来说会更低些。

在Android的同一个app中开启多进程是很简单的,只需要在指定的组件下的process属性赋予一个值就可以了,如下:

<activity
      android:name=".ProcessActivity"
      android:label="@string/title_activity_process"
      android:process=":remote"
      >
</activity>
为process属性设置一个值“:remote”,这样就告诉了系统,当用户打开ProcessActivity时,ProcessActivity运行在另外一个名字是package_name+remote的进程当中。还有一种设置process属性值的方式,android:process="package_name.your custom
process name",这种是完整的命名方式。之前那种方式创建的进程是属于app的私有进程,其他应用的组件不可以和它跑在同一个进程中,而后者命名方式创建的进程属于全局进程,其他应用通过ShareUID方式可以和他跑在同一个进程中。

需要注意的是,如果在一个app中开启两个进程的话,application会被创建两次,这是因为当一个组件跑在一个新的进程中的时候,由于系统会为这个新的进程分配一个单独的虚拟机让它运行,这相当于是重新打开了我们的app一次,所以application肯定会再次创建。由于两个进程拥跑在不同的虚拟机中,用的不同的内存空间,所以是无法共享静态成员数据的。例如,app中有一个Book.class类,其中有一个静态的成员变量,我们在打开新的进程之前,改变这个静态成员变量的值,然后在新的进程中去获取该变量的值还是最初始的值,而不会是经过之前修改后的值,这是因为两个进程拥有不同的内存空间。

初识就先到这里吧~ 嘿嘿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: