文档章节

关于Android中Intent传递Serialzilable数据的问题

小小_小小
 小小_小小
发布于 2014/05/20 11:16
字数 675
阅读 423
收藏 5

    之前写程序,如果是队列数据的话,一般都是用ArrayList来作为存储介质,但是现在接手公司的新项目,因为之前这个公司是在windows mobile上实现的(也就是C写的),他们可能更习惯使用Vector,之前也没有了解过Vector,后来查询java的api文档,java确实也有Vector的实现。

    先看下java中对Vector的描述:(对Vector熟悉的下面这段可不看)

      Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

    从 Java 2 平台 v1.2 开始,此类改进为可以实现 List 接口,使它成为 Java Collections Framework 的成员。与新 collection 实现不同,Vector 是同步的。 

    之前看think in java 中也有提到,Vector与List相比,主要的区别就在于,Vector是同步的,List是非同步的,Vector在迭代的时候是不能对队里的数据进行增删操作的,否则会抛出ConcurrentModificationException异常,同理,在单一线程条件下,Vector的效率较之ArrayList等会更低,因此在Android平台下可能也不太会使用到该类。

      下面就是重点了,先看下Vector的类图:

可以看到Vector是实现了Serializable接口的,所以很显然,Intent是可以传递这样的数据的,但是在实践中还是发现问题了,当我在Activity A中将Vector数据put进入intent的bundle中时,在Activity B中去取出数据(getSerializable)时,将其强转为Vector,程序会报错,cant Cast ArrayList to Vector(不能将Arraylist转换为Vector类型),见鬼了,后来去搜了下,stackflow上也有哥们问到这样的问题,有人猜测是所有Collection数据在进入Intent后,都被Android强转为Arraylist了,这里我还没有查询Android源码,但根据表现出来的问题也基本是这样的,哪位大神可以看下源码。

    所以,结论就是,尽量不要在Android中使用Vector,如果确实因为线程同步的问题必须使用,那当你看到那个类转换异常时也不要惊讶,老老实实把它先用Arraylist盛放起来,再转回到Vector,或者程序的参数或者返回值接口不要写死为Vector,使用List这种泛型,这样也比较有利于程序的扩展。

    算是今天的一点心得,记下来先...

© 著作权归作者所有

小小_小小
粉丝 4
博文 14
码字总数 4965
作品 0
海淀
私信 提问
Android SDK Document 框架导读的翻译和注解[6]——Activating components: intents【用Intent激活组件】

Activating components: intents【组件激活】 这里提到的Intent,类似于Content Provider,也是用户消息传递的, 但两者存在区别: 当一个从ContentResolver的请求的目标是Content Provider时,...

晨曦之光
2012/03/09
81
0
Android SDK Document 框架导读的翻译和注解[6]——Activating components: intents【用Intent激活组件】

Activating components: intents【组件激活】 这里提到的Intent,类似于Content Provider,也是用户消息传递的, 但两者存在区别: 当一个从ContentResolver的请求的目标是Content Provider时,...

晨曦之光
2012/03/07
146
0
Android SDK Document 框架导读的翻译和注解[7]——Intents and Intent Filters

Android应用程序中三个主要的组件——Activity, Service, Broadcast receiver——都是由Intent中传递过来的消息激活的, Intent消息传递是这样一个基础手段,它把相同或者不同应用程序的组件...

晨曦之光
2012/03/09
106
0
Android SDK Document 框架导读的翻译和注解[7]——Intents and Intent Filters

Android应用程序中三个主要的组件——Activity, Service, Broadcast receiver——都是由Intent中传递过来的消息激活的, Intent消息传递是这样一个基础手段,它把相同或者不同应用程序的组件...

晨曦之光
2012/03/07
199
0
Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中,对AndroidUI做了初步的了解和学习,本篇继续进行Android开发学习的整理。And...

Realfighter
2015/03/04
456
0

没有更多内容

加载失败,请刷新页面

加载更多

云栖干货回顾 | 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。AnalyticDB PG通过行存...

大涛学弟
6分钟前
2
0
TL138/1808/6748-EasyEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。开...

Tronlong创龙
11分钟前
1
0
开普勒平台开源版

https://github.com/kplcloud/kplcloud

perofu
14分钟前
1
0
昨天,这项阿里技术再获世界级科技大奖!

第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光。 昨天,阿里云自研数据库POLARDB 在会上当选世界互联网领先科技成果。POLARDB解决了企业在云时代的数据库难题,帮助企...

阿里云官方博客
14分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部