Android源码(8) --- Binder(2) 序列化
来源:互联网 发布:linux嵌入式开发 编辑:程序博客网 时间:2024/06/18 16:33
Android 开发的时候,在对数据进行持久化的时候,或者数据传递的时候会用到序列化,这时候可以对当前数据类实现Serializable或者Parcelable接口。尤其是进程间通信时,传递数据需要对对象进行序列化。
序列化
- 序列化指的是将一个实例对象编码成字节流,并从字节流编码中重新构建对象实例的能力。将一个对象编码成字节流,称为序列化;从一个字节流中读出一个对象实例,称为反序列化。
使用场景
- 1.持久化存储对象
- 2.序列化对象在网络中传输
- 3.Bundle传输对象
- 4.进程间参传递对象(Parcelable)
Serializable和Parcelable 区别
Serializable
- Java自带
- 使用简单、代码量少,实现接口即可
- 效率相较Parcelable低
- 序列化时,产生大量临时变量,引起频繁GC
Parcelable
- Android 专用
- 使用稍复杂,代码量相较而言多点,需要重写相关序列化方法
- 性能比Serializable高十倍以上
- 对序列化完整对象进行拆解,每一部分都是Intent支持的类型。
使用
- Serializable 只需要添加 serialVersionUID即可。也可以不添加,但是由于在修改序列化类后,反序列话检查到serialVersionUID与运行时生成serialVersionUID不一致变会报错:InvalidClassException。规范推荐添加serialVersionUID。
public class UserModel implements Serializable{ private static final long serialVersionUID = 123456789L; public String userName; public int userId; public UserModel(String userName, int userId) { this.userName = userName; this.userId = userId; }}
- Parcelable
public class UserModel implements Parcelable { private String name; private int id; public UserModel(String name, int id) { this.name = name; this.id = id; } /** * 序列化 */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(id); } @Override public int describeContents() { // 大都返回0即可 return 0; } /** * 反序列化 */ public static final Creator<UserModel> CREATOR = new Creator<UserModel>() { @Override public UserModel createFromParcel(Parcel in) { // 反序列对象 return new UserModel(in); } @Override public UserModel[] newArray(int size) { // 反序列数组 return new UserModel[size]; } }; /** * 使用反序列化得到的 Parcel 构造对象 */ protected UserModel(Parcel in) { name = in.readString(); id = in.readInt(); }}
总结
- 在常见的Model序列化需要持久存储用Serializable,操作简单,上手快,工作效率提高。
- 在Bundle传递对象和进程间通讯的情况下使用Parcelable(内存间的传递),性能至上。
阅读全文
0 0
- Android源码(8) --- Binder(2) 序列化
- Android Binder机制源码笔记(2)
- 序列化和binder
- Android 源码分析 -- Binder机制
- Android源码代理模式---Binder
- 【原创】【android】【Binder】2 Binder Vs Socket
- android Binder机制2---Binder的数据结构以及Binder驱动
- android binder驱动源码分析(一)
- android binder驱动源码分析(二)
- Android应用程序启动Binder线程源码分析
- Android Binder驱动源码下载地址
- Android Binder机制源码笔记(1)
- Android源码的Binder权限控制
- Android应用程序启动Binder线程源码分析
- Android源码(9) --- Binder(3) AIDL使用
- Android源码(10) --- Binder(4) ServiceManager 启动
- Android IPC之Binder源码分析
- Android binder (2): Parcel
- IP地址划分、组播地址、公有IP、私有IP
- JAVA入门知识---小结
- ElasticSearch的head插件中如何使用cat接口
- Android编译错误error: ext4_allocate_best_fit_partial: failed to allocate 74 blocks, out of space?
- 补充
- Android源码(8) --- Binder(2) 序列化
- 网络编程知识总结 之 简单的iOS HTTP服务器
- 《Android 插件化框架VirtualAPK :(二)原理分析》
- 机器学习精简教程之一——线性代数知识
- 【Machine Learning】笔记:神经网络的表示
- 51nod 1126 求递推序列的第N项 矩阵快速幂
- Android2.2 连接GitHub时出错解决方法
- 线性表的线性存储和链式存储
- eclipse等号左边返回值类型代码自动补全(2017年7月31日19:59:51)