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

  • 相关阅读:
    PHP获取指定的时间戳
    Elasticsearch
    git有用基本指令
    php中的json_decode
    有用的sql积累
    git submodule使用原理
    mysql重复插入时insert更改为update更新操作
    jpm
    awk 语句
    tomcat 发布简单的html网站
  • 原文地址:https://www.cnblogs.com/anny0920/p/12650182.html
Copyright © 2020-2023  润新知