[Android笔记]IPC系列之IPC简介和多进程

作者: Zach_C | 来源:发表于2016-07-08 00:18 被阅读141次

    IPC

    <pre>Inter-Process Communication <p> -- 进程间通信或者跨进程通信,即指两个进程之间进行数据交换的过程</pre>

    线程

       操作系统中的描述是,线程是CPU调度的最小单元,同时线程是一种有限的系统资源。
    

    进程

      进程是一个执行单元,可以是一个程序或应用。
    

    进程和线程的关系

      一个进程可以只有一个线程,即主线程(UI线程),当然也可以有多个线程;
      但一个线程只存在一个进程中
    

    IPC不是Android系统中独有的,任何一个系统中都有相应的IPC机制,如Windows中可以通过剪贴板、管道和油槽等来进行进程间通信;Linux中可以通过命名管道、共享内存、信号量等来进行进程间通信。
    Android做为一个基于Linux内核的移动操作系统,但其进程间通信方式却和Linux有所不同,它有其自己的进程间通信机制,最常见的就是Binder,通过Binder可以轻松的实现进程间通信,出了Binder之外还有Socket,通过Socket可以实现任意两个终端之间的通信,固同一个设备的两个进程通过Socket也是可以通信的。

    多进程

      IPC的使用场景就是多进程,多进程的情况分为两种,
          * 一个应用因为某些原因需要采用多进程模式来实现
          * 当前应用需要向其它应用获取数据,固系统提供的ContentProvider去查询数据的时候,也是一种进程间通信
    

    多进程模式

    Android中使用多进程只有一种方法,那就是在AndroidMenifest中给四大组件指定android:process属性,可以很轻易地开启多进程模式
    还有一种非常规的方法,就是通过JNI在native层去fork一个新的进程。

    Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。
    两个应用通过ShareUID跑在同一个进程中是有要求的,需要具有相同的ShareUID和相同的签名,只有这样才能互相访问对方的私有数据,如data目录、组件信息以及共享内存等,就像是一个应用的两部分。

    运行机制

    Android为每个应用都分配一个独立的虚拟机,也可以说是为每个进程分配一个独立的虚拟机,不同的虚拟机在内存中分配不同的内存地址空间,导致在不同的虚拟机中国年访问同一个类的对象会产生多份副本。
    所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败,这也是多进程所带来的主要影响。

    多进程会造成的问题:
     1. 静态成员和单例模式完全失效
     2. 线程同步机制完全失效
     3. SharePreferences的可靠性下降
     4. Application会多次创建
    

    当一个组件跑在一个新的进程中的时候,由于系统要在创建新的进程同时分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程,相当于系统又把这个应用重新启动一遍,既然重新创建新的Application,自然就创建新的Application。

    总结

    多进程中模式中,不同进程会拥有独立的虚拟机、Application和内存空间
    相当于两个不同的应用采用了ShareUID的模式

    由于多进程中不能直接通过共享内存来通信,故有了很多跨进程通信机制来实现数据交互,如Intent传递数据、共享文件、SharePreferences、基于Binder的Messenger和AIDL以及Socket等等,下面我们就来学习IPC的各种跨进程通信机制。

    相关文章

      网友评论

        本文标题:[Android笔记]IPC系列之IPC简介和多进程

        本文链接:https://www.haomeiwen.com/subject/dqfkjttx.html