Android中 Intent/Bundle传递对象取值为null的剖析以及Serializable和Parcelable原理解析

在Android中传递数据一般为基本数据类型,int double float 等

有时候会传递对象,那么这个对象和其内部类就要实现Serializable这个接口或者Parcelable这个接口

Serializable:(不推荐)

这个比较简单 一般直接写上implements Serializable即可,复杂点需要加上ID。long类型。

因为这个接口只是一个空接口,并没有需要实现的方法

从图1可以看出这个java.io.Serializable是基于IO包下的,那么可想而知IO一般都是耗时操作,读写数据等,

所以java.io.Serializable 会将对象写入到IO进行序列化,从而进行数据传递,但是这是比较耗时的,不推荐这种写法

第二种是Parcelable(推荐)

然后复写其

writeToParcel
describeContents
Creator<T t>

主要方法,然后写一个构造类,(如果使用FastJSon去解析数据记得添加一个无参的构造方法,否则会解析对象失败

之前用Eclipse和开始用AS开发这几个方法都是手写,费事,AS可以自动生成相对应的方法

但是Object类型不给生成其对应的writeToParcel和构造方法的读取,因为它不能判断是写入int 或者String 或者是0/1

这也算比较坑,所以使用Intent Bundle 传递

Parcelable数据的时候,一定得看好是否生成了所需要的字段,没有的话可以手动更改类型,与后台开发人员进行协定格式

发布了42 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_29769851/article/details/102054062