Android开发之Serializable 和 Parcelable的区别(源代码分享)
16lz
2021-01-25
android 中自定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。
一 序列化原因:
1.永久性保存对象,保存对象的字节序列到本地文件中;
2.通过序列化对象在网络中传递对象;
3.通过序列化在进程间传递对象。
二 至于选取哪种可参考下面的原则:
1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议各位可以用Serializable 。
Serializable 的实现,只需要继承 implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。
Parcelable的实现需要以下步骤
(1)describeContents方法。内容接口描述,默认返回0就可以;
(2)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:
writeToParcel (Parcel dest, int flags)
(3)创建相应函数的构造方法
(4)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。
newArray(int size) return new T[size])源代码如下
package com.example.service;import android.os.Parcel;import android.os.Parcelable;public class Person implements Parcelable{ private int age; private String name; public Person(Parcel in) {age=in.readInt();name=in.readString();}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int describeContents() {// TODO Auto-generated method stubreturn 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {// TODO Auto-generated method stubdest.writeInt(age);dest.writeString(name);}public static final Parcelable.Creator CREATOR=new Creator() {@Overridepublic Person[] newArray(int size) {// TODO Auto-generated method stubreturn new Person[size];}@Overridepublic Person createFromParcel(Parcel source) {// TODO Auto-generated method stubreturn new Person(source) ;}};}
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android中实现Bitmap在自定义View中的放大与拖动
- Android数据解析获取JSONObject的key值-Iterator应用
- Android(安卓)传感器 Sensor
- AIDL使用详解及原理
- 源码分析为什么requestDisallowInterceptTouchEvent(true)能阻止
- Android(安卓)studio 不用数据线调试真机