Android Intent 传递序列化数据
intent.putExtra("xxx", SerializableXXX);
SerializableXXX bean =(SerializableXXX) intent.getSerializableExtra("xxx");
serialVersionUID 的作用
只要实现Serializable 就可以实现序列化,那么serialVersionUID 要不要指定呢?
serialVersionUID 是用来辅助序列化和反序列化过程的。 序列化的时候,系统会把当前类的serialVersionUID 写入序列化文件中( 如果没有指定serialVersionUID ,系统会根据类的成员名称,默认生成一个serialVersionUID )
这样会造成一个问题: 如果类的结构发生了变化,添加或删除了一个属性,默认的serialVersionUID 会发生变化。反序列化时,serialVersionUID 不一致。会抛出
java.io.InvalidaClassException 。
如何快速生成serialVersionUID
File–Setting–Editor–Inspections–Java–Serialization issues–勾选Serializable class without “serialVersionUID”
然后Android studio 会提示是否自动生成 serialVersionUID
transient 关键字 与静态成员变量
使用transient 声明的属性,不会参与序列化的过程。
静态成员变量属于类,不属于对象,也不会参与序列化的过程
Parcelable 的优点
Serializable是一个没有任何方法的接口,直接用类实现即可,具体序列化和反序列化由Java实现。缺点是会产生大量的临时变量。占用内存多。
Parcelable:Android提供 。效率高,占用内存少。