Parcelable Android SDK提供,基于内存,读写高于硬盘

binder共享内存

硬盘或者网络,,必须Serializable,序列化时会产生大量的临时变量,从而引起频繁的GC

Parcelable只适用于android 跨进程调用,性能优,不能保证持续性,不能磁盘使用

SQLite和SharePreferences也是序列化

面试:

1、Android使用Bundle而不直接用Map?

A:Bundle使用场景是小数据量的操作,使用Bundle操作速度和内存上都比较占优势,因为其内部由ArrayMap实现,ArrayMap内部是两个数组,一个int数组保存下标,一个对象数组保存<key, value>,使用二分法对key进行排序,在增删查都使用的是二分法,使用于小数据操作,

        EMPTY = new Bundle();
        EMPTY.mMap = ArrayMap.EMPTY;

        ArrayMap<String, Object> map = mMap;
            mHashes = EmptyArray.INT;
            mArray = EmptyArray.OBJECT;

HashMap内部是数组和链表,在数据少的时候,Entry Array比ArrayMap占用的内存多,另外,Android中intent携带数据需要的是基本数据类型或者可序列化类型,HashMap用Serializable序列化,Bundle用Parcelable序列化,Bundle加快序列化和反序列化,方便数据传输

public final class Bundle extends BaseBundle implements Cloneable, Parcelable {

2、为何Intent传递数据要通过序列化?

A:因为intent启动其他组件的时候,会离开当前应用程序,进入AMS,这就意味着Intent数据会在不同进程间传输,,,Android基础linux,不同进程间java对象是不能传输的,,所以进行序列化,让其在AMS进程和APP进程之间传输;

Serializable使用方便,Parcelable性能好,

3、Bundle/Intent通信原理及大小限制:

A:Intent中的Bundle是用Binder机制进行数据传输的,能使用的Binder缓冲区是有大小限制的,一个进程默认有16个Binder线程,线程能占的缓冲区比较小,资料显示128K差不多

原文地址:https://www.cnblogs.com/anny0920/p/12650182.html