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

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

可以看出,
读取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直接抛出异常即可;
网友评论