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

 2023-09-13 阅读 19 评论 0

摘要:2019独角兽企业重金招聘Python工程师标准>>> 之前写程序,如果是队列数据的话,一般都是用ArrayList来作为存储介质,但是现在接手公司的新项目,因为之前这个公司是在windows mobile上实现的(也就是C写的),他们可能更

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    之前写程序,如果是队列数据的话,一般都是用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 是同步的。 

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

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

110609_bAkP_269663.png

可以看到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这种泛型,这样也比较有利于程序的扩展。

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

数据链路层传输数据的单位是,转载于:https://my.oschina.net/u/269663/blog/266778

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/52398.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息