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) ;}};}


更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android中实现Bitmap在自定义View中的放大与拖动
  5. Android数据解析获取JSONObject的key值-Iterator应用
  6. Android(安卓)传感器 Sensor
  7. AIDL使用详解及原理
  8. 源码分析为什么requestDisallowInterceptTouchEvent(true)能阻止
  9. Android(安卓)studio 不用数据线调试真机

随机推荐

  1. MySQL 8.0的十大新特性
  2. SQL:如何从另一个表中删除行会议条件
  3. java往SQL Server中插入数据插不进去
  4. delphi+sql server 数据库死锁问题。高分
  5. PHP OOP - 调用非obj上的成员函数[重复]
  6. 我学了delphi也有几个月了,我是否能参加团
  7. Postgresql数据库安装问题,找不到configur
  8. mysql 导出数据到txt文件
  9. Oracle ------ SQLDeveloper中SQL语句格
  10. 【MySQL】配置MySQL安装和远程访问步骤