Serializable

public class SerializableDeveloper implements SerializableString name;int yearsOfExperience;List<Skill> skillSet;float favoriteFloat;static class Skill implements Serializable {String name;boolean programmingRelated;}
}

只要保证类以及其属性类都继承了Serializable就可以了,很easy了。

Parcelable

不好的地方 就是继承Parcelable后,需要覆写一坨方法(主要是序列化读写接口),但基本上AS可以全部自动生成,所以也没有想象的那么复杂
如下对象:

class ParcelableDeveloper {String name;int yearsOfExperience;List<Skill> skillSet;float favoriteFloat;public ParcelableDeveloper(String name, int yearsOfExperience, List<Skill> skillSet, float favoriteFloat) {this.name = name;this.yearsOfExperience = yearsOfExperience;this.skillSet = skillSet;this.favoriteFloat = favoriteFloat;}
}

IDE自动会生成:

class ParcelableDeveloper implements Parcelable {String name;int yearsOfExperience;List<Skill> skillSet;float favoriteFloat;public ParcelableDeveloper(String name, int yearsOfExperience, List<Skill> skillSet, float favoriteFloat) {this.name = name;this.yearsOfExperience = yearsOfExperience;this.skillSet = skillSet;this.favoriteFloat = favoriteFloat;}protected ParcelableDeveloper(Parcel in) {name = in.readString();yearsOfExperience = in.readInt();skillSet = in.createTypedArrayList(Skill.CREATOR);favoriteFloat = in.readFloat();}public static final Creator<ParcelableDeveloper> CREATOR = new Creator<ParcelableDeveloper>() {@Overridepublic ParcelableDeveloper createFromParcel(Parcel in) {return new ParcelableDeveloper(in);}@Overridepublic ParcelableDeveloper[] newArray(int size) {return new ParcelableDeveloper[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeInt(yearsOfExperience);dest.writeTypedList(skillSet);dest.writeFloat(favoriteFloat);}
}

嵌套对象也需要实现Parcelable

如上面中的Skill对象

public class Skill implements Parcelable {public String skillname;public Skill(String skillname) {this.skillname = skillname;}protected Skill(Parcel in) {skillname = in.readString();}public static final Creator<Skill> CREATOR = new Creator<Skill>() {@Overridepublic Skill createFromParcel(Parcel in) {return new Skill(in);}@Overridepublic Skill[] newArray(int size) {return new Skill[size];}};@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(skillname);}
}

哪里可以使用Parcelable对象?

就我所知,Activity之间数据的传递,比如:

public class ParcelableFromActivity extends AppCompatActivity {ParcelableDeveloper pd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_parcelable);List<Skill> skillList = new ArrayList<>();skillList.add(new Skill("java"));pd = new ParcelableDeveloper("jason", 6, skillList, 2);TextView tv = (TextView) findViewById(R.id.content);tv.setText(pd.name + " 经验:" + pd.yearsOfExperience + "年 技能:" + pd.skillSet.get(0).skillname);}public void jump(View view) {Intent i = new Intent(this, ParcelableToActivity.class);Bundle b = new Bundle();b.putParcelable(ParcelableToActivity.PARCEL, pd);i.putExtra(ParcelableToActivity.BUNDLE, b);startActivity(i);}
}

为什么要创造出Parcelable?

据说是因为效率原因,Serializable用起来是方便,但他是用反射来实现序列化的,所以效率是瓶颈。下图是效率对比:

Parcelable 比 Serializable快了10多倍。有趣的是,即使在Nexus 10这样性能强悍的硬件上,一个相当简单的对象的序列化和反序列化的过程要花将近一毫秒。

所以在碰到大量需要序列化的场景,还是使用Parcelable吧,毕竟效率性能伤不起啊

参考:

这哥们讲的还蛮详细
国外的一篇译文

【Android基础】序列化 Serializable vs Parcelable相关推荐

  1. android 保存 parcelable对象,Android 使用序列化Serializable和Parcelable

    Android 序列化Serializable和Parcelable使用和区别 一:Serializable 1.什么是序列化 将一个类对象转换成可存储,可传输状态的过程. 2.什么是Serializ ...

  2. Android的序列化(Serializable和Parcelable)

    [齐天的博客]转载请注明出处(万分感谢!): https://blog.csdn.net/qijinglai/article/details/80813423 前言 Android中要实现对象持久化或 ...

  3. Android中的Serializable和Parcelable序列化

    Serializable和Parcelable接口都可以完成对象的序列化过程,在Android中当我们需要通过Intent和Binder传输数据时,我们要传输的对象就需要使用Serializable和 ...

  4. 序列化Serializable、Parcelable

    序列化的概念: 所谓序列化就是将对象变成二进制流,便于存储和传输. 为什么要序列化和反序列化? 当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二 ...

  5. 序列化-Serializable和Parcelable的简单介绍

    序列化的本质 序列化是一种用来处理对象流的机制.序列化是为了解决在对对象流进行读写操作时所引发的问题. 序列化:将java对象转换成字节序列的过程,字节码可以保存到数据库.内存.文件等,也可用于网络传 ...

  6. android 序列化 xml serializable,关于Android中的序列化Serializable和Parcelable的学习

    简单地说,"序列化"就是将运行时的对象状态转换成二进制,然后保存到流,内存或者通过网络传输给其他端. 两者最大的区别在于 存储媒介的不同,Serializable使用 I/O 读写 ...

  7. Android 序列化(Serializable和Parcelable),kotlin开发windows程序

    Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法.如 ...

  8. Android 序列化(Serializable和Parcelable),android开发板底层开发

    实现Parcelable接口

  9. Android 序列化(Serializable和Parcelable)

最新文章

  1. php 字符串转时间戳_php如何将时间字符串转换为时间戳
  2. “口碑营销”产品模型推测与分析
  3. 学会这几招设计思维让平面设计上一大台阶
  4. 自适应中值滤波用于超声图像降噪
  5. 往IOC 容器中添加组件的方式
  6. 湖北大学 计算机考研,湖北大学考研难吗?一般要什么水平才可以进入?
  7. 缺乏运动 七种病早早光临
  8. BZOJ3240 NOI2013矩阵游戏(数论)
  9. Linux权限相关及yum源的配置
  10. hg diff仅对当前目录下的文件有效
  11. 华为设备好的visio图标及ppt图标
  12. Python基础--步长
  13. 计算机等级考试四级网络工程师真题,计算机等级考试四级网络工程师试题
  14. 关于计算机社团的游戏活动计划,社团心理小游戏活动策划书范文
  15. 学生用台灯哪个品牌比较好?推荐光照舒适的护眼台灯
  16. ps 如何裁切图片成一定的长宽高比例
  17. 软件工程师的本手、妙手和俗手
  18. 如何使用爬虫采集天猫店铺商品信息
  19. 悍将余承东「调防」,华为云能翻盘吗?
  20. 浅谈JAVA程序破解(原创)

热门文章

  1. Chrome检查更新总失败?安装细则讲解
  2. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.13
  3. 征集并发文献译者之Disruptor
  4. 有关oracle数据库中的日期显示问题
  5. 【数据安全案例】车管信息再遭窃取,数据安全缺乏保障
  6. CF232C Doe Graphs
  7. 【面试】上中断和下中断
  8. MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
  9. 洛古 P1373 小a和uim之大逃离
  10. 【VS开发】【DSP开发】WinDriver简介(或介绍)