Android IPC机制之IPC概念、Android 多进程和相关基础知识

1.IPC 的基本概念

1.1 IPC的使用场景

IPC 即 Inter-Process Communication 进程间通信,IPC用于多进程,而Android的多进程情况一般有:

1.一个应用需要在多进程模式下运行,例如,一些组件需要再单独的进程中运行,或者,为了增加应用可使用的内存。

2.当前应用需要获取其他应用的数据,例如content provider。

2.Android的多进程模式

Android 开启多进程方式:

一.四大组件在注册时指定Process属性,该属性默认是App的包名,如果单独指定那么该组件就能运行在单独的进程中。

process有两种赋值方式:

1.以 “:”开头例如“:second Process” 那么该进程名为:包名+: second Process ,”:“表示该进程为APP的私有进程,其他APP的组件不能和他泡在统一进程中。

2.以”.”开头例如:”. third process“ 该进程名为:包名+.third Process ,该进程是全局进程,可以与其他app的组件一起运行在同一进程中。

不同应用跑在同一进程中的方法:Android为每个APP分配一个UID ,具有相同的UID的应用才能共享数据,包括data目录,组件信息,不包括内存数据,只有两个应用同时具有相同的ShareID和签名,就可以运行在同一进程中,这时可以共享内存数据。

二、通过jni的native层创建进程,这种方式不常用。

3.Android多进程运行机制

Android为每个进程或者app分配独立的虚拟机,不同虚拟机有独立的内存空间。所以只要通过内存来共享数据,在多进程下都会有问题。多进程一般会有如下问题:

1.类静态成员和单例模式失效。因为不在同一内存空间中,所以在每个进程中又有同一个类副本和同一类对象副本,不同进程是互不影响的。

2.线程同步机制失效。线程是在进程中的,所以不同进程的线程是互不影响的。

3.sharedpreference可靠性下降。sharepreference是通过xml来实现的。不支持多进程的读写。

4.application会多次创建。创建进程需要创建新的应用,创建独立的虚拟机,同时会创建新的Application对象,一个app一个虚拟机。

一个应用多个进程相当于多个应用使用相同SharedUID模式,只能共享文件,包括data目录,组件信息,但不包括内存数据。

4.IPC涉及的基础概念

1.序列化和反序列化

序列化和反序列化的对象内容一样但是是==不同的两个对象。==

序列化的方式:

一、实现Serializable接口

实现该接口需要指定一个serialVersionID,用于标示当前类的版本。序列化的时候,系统将id一起写入文件中,反序列化时,将文件中的id和当前的id对比如果相同则可以序列化,否则,表示当前类的成员或结构发生变化,反序列化将出错。

一般手动指定id值,若不指定编译器会根据类结构生成hash值作为id。

二、实现parcelable 接口

一个类实现该接口,就可以通过Intent和Binder传递。实现parcelable相比前一种方法要复杂一些。

需要实现:writeToParcel(),用于序列化,通过parcel对象的write实现写入的,

反序列化通过内部类creator<>对象CREATOR实现,也是通过parcel对象的的read方法读取。

内容描述功能由desceiblecontents方法完成,一般返回0,对象中存在文件描述符时返回1。

还有一个私有的构造方法,如果类==中有其他的可序列化类对象,需要传递当前线程的上下文类加载器==,否则找不到类。

系统实现parcelable的类有,Intent ,Bundle , Bitmap ,List Map中的对象能序列化,才能序列化。

两种序列化方式比较

serializable 是java的序列化方式,使用简单,开销大。

parcelable是Android的序列化方式,使用麻烦,效率高,Android推荐使用。

后者用于内存序列化上,序列化到磁盘或者网络传输时比较麻烦,推荐使用serializable。

2. Binder

Binder,中文意思,粘合剂,是个非常复杂的概念,也是IPC的核心内容,将在下篇文章详细讲解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值