美文网首页
Parcelable序列化造成的OOM

Parcelable序列化造成的OOM

作者: 重新起步 | 来源:发表于2020-08-07 22:52 被阅读0次

场景:

外部通过命令行传递参数;
例如:

问题:

简单创建一个student类,实现Parcelable,如下图:


image.png

其中有一个phoneNumber的类型是一个List类型,那么就会相对应的有一个
phonesNumber = in.createStringArrayList();

查看Parce中的createStringArrayList源码:


image.png

可以看出,
读取name是通过in.readString();
读取age 是通过 in.readInt();
每读一次,相当于指针向后移动一格,
但是当遇到list类型的时候,读取list是先通过readInt读取一个值,然后在内存中,创建一个size为N的list;
后面再依次读出N个数值,塞给list;
那么问题来了,如果N是一个>65535的值,那么系统就会报OOM;
哪种情况下,N可能为一个大于65535的值呢,遇到这种情况如何解决呢;

解决方案:

1.首先判断该实现parcelable的类外部是否可控;
2.如果外部可控,需要自己继承parcelable,然后判断图二中的N是否大于65535,如果大于65535直接抛出异常即可;

相关文章

  • Parcelable序列化造成的OOM

    场景: 外部通过命令行传递参数;例如: 问题: 简单创建一个student类,实现Parcelable,如下图: ...

  • 序列化Serializable和Parcelable

    序列化主要有两种方式:Serializable,Parcelable;区别:内存的序列化Parcelable(直接...

  • AS插件的使用

    Parcelable方式的自动序列化 Android Parcelable code generator实现...

  • Android序列化

    提问:什么是序列化?为什么要序列化?为什么要使用Parcelable?Parcelable与Serializabl...

  • 序列化

    Parcelable Parcelable是一个接口,只要实现这个接口,该类的对象就可以实现序列化。序列化:由wr...

  • Android - Serializable和Parcelabl

    目录 Parcelable与Serializable的性能比较 传递消息 插件自动生成Parcelable序列化 ...

  • Parcelable使用记录

    Parcelable是Android为我们提供的序列化的接口,Parcelable相对于Serializable的...

  • Parcelable&Serializable序列化使用

    Parcelable序列化接口使用## 首先先实现Parcelable接口 以下是JavaBean的代码片段 Se...

  • Java序列化

    Android序列化 目标 为什么序列化 序列化的定义 Serializable的使用和原理 Parcelable...

  • Android序列化和反序列化开发精要

    Serializable - Java原生的序列化方案Parcelable - android提供的序列化方案 S...

网友评论

      本文标题:Parcelable序列化造成的OOM

      本文链接:https://www.haomeiwen.com/subject/epakrktx.html