首页 > 移动平台 > 详细

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

时间:2020-04-07 00:51:38      阅读:74      评论:0      收藏:0      [点我收藏+]

 

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差不多

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!