2.1 IPC 机制 前言:IPC 是 Inter-Process Communication 的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。Android 中的进程通信方式有哪些呢,Bundle、文件共享、基于 Binder 的 AIDL 和 Messenger、ContentProvider 和 Socket 等进程间通信方式,Android 最有特色的进程间通信方式就是 Binder 了。接下来是 IPC 通信的一些笔记。
如何创建多个进程 Android 中一个应用如何创建多个进程,那就是给四大组件(Activity、Service、Receiver、ContentProvider)在 AndroidMenifest 中指定 android:process 属性,除此之外没有其他办法。(还有一个比较特殊的方式,通过 jni 在 native 层去 fork 一个新的进程,暂时不考虑)
假设当前应用的包名为“com.ryg.chapter_2”,当 SecondActivity 启动时,系统会为它创建一个单独的进程,进程名为“com.ryg.chapter_2:remote";当 ThirdActivity 启动时,系统也会为它创建一个单独的进程,进程名为“com.ryg.chapter_2.remote”。没有指定 process 属性,那么它运行在默认进程中,默认进程的进程名是包名。
“:remote” 和 “com.ryg.chapter_2.remote”两种命名方式的区别:首先,“:” 的含义是指要在当前的进程名前面附加上当前的包名,这是一种简写的方法;第二个方式是一种完整的命名方式,不会附加包名信息。其次,以 “:” 开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,第二种方式属于全局进程,其他应用通过 ShareUID 方式可以和它跑在同一个进程中。
多进程带来的影响 所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败,这也是多进程所带来的主要影响。原因是 Android 会给每个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本。
【Android|第 2 章 IPC 机制】(1) 静态成员和单例模式完全失效。
(2) 线程同步机制完全失效。
(3) SharedPreferences 的可靠性下降。
(4) Application 会多次创建。
跨进程通信就是为了解决这个问题,实现数据交互。