[艺术探索]第二章 IPC机制(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010369338/article/details/79581738
  1. IPC简介

    IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。

    • 进程和线程
      线程是CPU调度的最小单元,同时线程是一种有限的系统资源。进程一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含与被包含关系。

    • Android中的多进程模式

      在Android中使用多进程方法,一种是给四大组件在AndroidMenifest中指定android:process属性。
      另外一种就是通过JNI在Native层fork一个新的进程。

  2. 开启新进程的两种方式

    • <activity android:name="cn.dzws.android.scrollrespondUtils.activity.RecyclerViewActivity" android:process=":remote"/> (1)
      <activity android:name="cn.dzws.android.scrollrespondUtils.activity.ScrollViewActivity" android:process="cn.dzws.android.scrollrespondUtils.remote"/>(2)

      进程名以:开头的进程属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。进程名不以:开头的进程属于全局进程,其他应用可以通过ShareUID方式可以和它跑在同一个进程中。
      两个应用通过ShareUID跑在同一个进程中是有要求的,需要这两个应用有相同的ShareUID并且签名相同才可以。

    • 多进程模式的运行机制,以及多进程带来的问题。

      public class UserManager {
          public static int userUid = 1;
      }
      (1)RecyclerViewActivity先将userUid赋值为2
      (2)ScrollViewActivity获取到的userUid还为1

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

  3. Serializable、Parcelable、Binder

    SerializableParcelable接口为数据序列化接口。

Serializable需要指定serialVersionUID(可以手动指定也可以由编译器自动生成)序列化和反序列化时两者serialVersionUID是相同的就可以正常进行操作。
如果不手动指定serialVersionUID这个值则会随着当前类的数据结构变化而变化,导致反序列化失败造成程序crash
Serializable主要是通过io流进行将数据读写到本地来进行持久化的。

Parcelable是Android平台提供的数据序列化接口,主要用在内存序列化上。

BinderAndroid中的一个类,实现了IBinder接口,从IPC角度来说BinderAndroid中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder/,它还是客户端和服务端进行通信的媒介。
个人理解:Binder基本原理进程间将数据序列化存储至/dev/binder/,再由另外进程将数据进行反序列化取出,至此完成了进程间的通信(Binder机制是一个很深入的话题,现在只提基本原理,不聊上层实现细节。)

猜你喜欢

转载自blog.csdn.net/u010369338/article/details/79581738