Android中的IPC机制

安卓的多进程机制:

  1. 对于安卓来说,每一个进程是在一个单独虚拟机中运行的。也就是说不能很简单的共享两个不同的虚拟机中的堆内存,必须要用Binder机制来进行管理。

  2. 多进程下会出现一下问题:

    • 静态成员和单例模式失效;
    • 线程同步机制失效;
    • SharedPreferences可靠性下降,本来在并发读写的时候可靠度就不是很高;
    • Application会被多次创建。
  3. 多进程的启动只需在四大组件中加入android:process属性即可。其中名字如果是以冒号:打头,表明是一个私有进程;如果包括了全部包名,就是公用进程,其他的应用可以通过ShareUID在同一个进程中进行访问,就好像是同一个应用的两个部分。关于ShareUserID的用法

安卓的多进程解决方案

详情见下表

表1

序列化

Serializable接口

只需要任意提供一个

1
private static final long serialVersionUID;

就可以自动序列化,这个是为了检查序列化版本是否相同。如果不自己指定一个的话,可能在类的结构发生改变之后使得不能反序列化回来。

Parcelable接口

1
public int describeContents();

返回当前对象的内容描述。如果有文件描述符返回1,反之为0。关于文件描述符

1
public void writeToParcel(Parcel out, int flags);

flags为1的时候,表示该对象需要作为返回值返回,不能立刻释放,反之为0。(包含了一系列的writeInt等方法)

1
2
3
4
public static final Parcelable.Creator<T> CREATOR = new Parcelable.Creator<T>{
public T createFromParcel(Parcel in);
public T[] newArray(int size);
}

分别返回对象和数组即可。

1
T(Parcel in)

包含了一系列的readInt等方法来反序列化读入。

区别

  1. Android中很多类是已经实现了序列化的,比如说Intent、Bundle、Bitmap等,不过要求其包含的元素都是可序列化的。

  2. 在内存中优先考虑Parcelable,外部存储或者网络传输优先考虑Serializable。

各解决方案的实现

详情见另几篇博客……

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2018 Alex's Blog All Rights Reserved.

Yifeng Tang hält Urheberrechtsansprüche.