Android Activity间传值选择,Serializable Or Parcelable

  前言:Activity就是Android世界的controller,它们构成了Android App里面的每一个页面,当然我们还会使用Fragment来将页面进一步划分,通过Fragment可以对特定业务模块的View+逻辑封装,让其与Activity解耦,同时还可以有自己的生命周期,让我们控制布局绘制和进行资源回收,这些都是Fragment的好处,以后有机会再谈,今天,我们想讨论的是Activity页面之间跳转时,互相传值的方法选择。

  我们知道,像int,long,double等基本类型和String都可以直接使用Intent类提供的putExtra方法直接打包传递,但很多时候,我们要传递的可能是一个实体类的对象,要传递一个实体类对象,有二种办法,标记类实现Serializable接口 或者 添加代码实现Parcelable接口,注意的是Serializable接口没有任何实际方法需要实现,它只是一个标记,标记可以进行序列化。Serialiable是Java提供的序列化接口,它将对象按规则转化为字节队列,字节队列可以进行网络传输,这样可以让java的对象跨环境的进行传输,序列化只能序列化成员变量,而静态变量和方法不会被序列化,transient关键字修饰的变量也不会被序列化。Java中反序列化时通过SerialVersionUID来判断是否能够反序列化,所以需要序列化的类最好都能给出一个固定的SerialVersionUID值,如下

而Parcelable是Android提供的接口,它主要是通过writeToParcel(),将需要持久化的字段保存到一个Parcel对象里面,然后通过CREATOR

从Parcel对象中,取出相应的字段,完成对象的恢复,很明显这里Parcelable有它的优势,需要保存哪些字段我们可以自由控制,因为写接口暴露给我们了,需要恢复哪些字段,我们同样可以控制,所以相对于Serializable,存储的代价小很多,因为Serializable需要保存很多额外的字段来保证反序列化能够成功。

    现在我们还是通过一个具体的实例来介绍这二种Activity传值的基本使用方法。假设,我们现在有一个商品Good的列表,Good类是这样的

第一个需求是点击列表的一个cell,跳转到Good的详情页,即我们需要将点击对应的Good对象传递到详情Activity。第二个需求是点击任何一个cell,将全部的Good信息传递到详情Activity,即传递一个Good数组。

我们先来看第一个需求,先用Serializable的方法,发送很简单

接收对象也很简单

我们再来使用Parcelable接口来传递,先定义一个类ParcelableGood

发送数据也很简单

接收也同样类似

第一个需求很简单就搞定了,我们再来搞定第二个需求,传Good的数组给详情Activity,如果使用Serializable的话,Intent没有提供putExtra直接传递Good数组的重载方法,所以我们需要做一个包装类,我新建一个WrapGood类如图

这样就可以直接传递一个WrapGood,间接达到传递Good数组的目的,

接收数据

因为Intent提供了putExtra方法直接传递Parcelable数组的重载,所以可以直接使用,

从Intent中取出Parcelable数组更简单

  现在为止Good里面的属性都是基本类型或者String,当然它的属性也可以是另外一个实体类,假设是GoodExtra类,这个时候如果要用Serializable序列化,GoodExtra也必须要标记Serializable接口。如果要使用Parcelable,GoodExtra同样要实现我们上面介绍的writeToParcel 和 CREATOR。

  最后我们来做一个总结,上面已经介绍了在Android开发中Serializable和Parcelable的用法,我们推荐使用Parcelable,理由大致有3个:1.Parcelable是Android 框架提供给我使用的,Google提供了比较好的接口和文档支持,例如上面的putExtra,就有对Parcelable数组的重载方法。2. Parcelable效率更高,Parcelable底层实现是内存的copy,速度很快,Serializable是IO操作,而且会用到反射,相对比较慢,国外有人测试过,Parcelable比Serializable从序列化到传输到反序列化,平均要快10倍左右。3.最后一个原因也是最重要的原因,Parcelable要序列化哪些字段,我们完全可以控制,而且还可以在其中加入各种转换,修饰,因为写接口暴露给我们了,我们可以自由定制,而Serializable就显的比较笨拙,而且需要一些额外的字节来存储类的信息,当然Serializable使用起来要更简单。这些都是它们在理论上的比较,项目中绝大多数场景,二者都可以完全胜任,具体用哪个,见仁见智吧~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
    隔壁老李头阅读 11,773评论 6 38
  • 本文主要内容 Activity的生命周期、通信方式、Intent Filter 【Activity】一个Activ...
    cxm11阅读 695评论 0 0
  • 刚学JS的DOM操作时,就知道了匹配一堆元素,会获得NodeList和HTMLCollection这两个对象,不过...
    oopsist阅读 2,336评论 0 2
  • 牛奶 鸡蛋 香蕉 红薯 桃仁 粗粮 蛋白质 膳食纤维 坚果
    Mehere阅读 192评论 0 2
  • 当下,人们都热衷于来一场说走就走的旅行。有人选择国内游,有人选择出境游,还有人是选择穷游。 每当朋友心情不好时,她...
    isabellaLilove阅读 411评论 0 0