关于可能出现的Parcelable 序列化问题纪要

一大早到公司发现昨天合并的代码推送远程开发分支被reject了,估计是没有更新代码通过更新代码把程序重新运行了一遍发现一个很有意思的问题就是点击图片浏览程序崩溃了,表示很纳闷,what? 难道是哪位同事改了图片加载的代码?查看log发现抛了这样一个运行时异常:

Parcel android.os.Parcel@416ee8b0: Unmarshalling unknown type code 6357102 at offset 172

   从字面上来看是实现Parcelable序列化接口出问题了,坑爹的是我没有网这方面去找问题,应为觉得实现Parcelable接口的对象类应该不会有人去改动,于是断点打了几百遍发现在getIntent时调用hasExtra()方法就已经出错了,更别谈取值了,于是就一直在研究getIntent为什么会抛异常,显然这个方向是错的,getIntent这个是没有的问题,有问题的是hasExtra的内部方法:

其内部应该是对Parcelable序列化对象进行了校验,具体源码没怎么看,如果有问题那么应该就是校验出现问题了,所以抛出异常,最后显然我对该实现Parcelable接口的类check了一下,终于发现了问题所在:


查看代码历史记录通过对比发现,andorid其他同事对该类新增了一个imgType字段但是进行write与read操作时顺序有问题最后导致的Parcel 类型错误。通过改正顺序即可解决此问题

你可能感兴趣的:(关于可能出现的Parcelable 序列化问题纪要)