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