关于android中对象的传输
来源:互联网 发布:如何购买cad软件 编辑:程序博客网 时间:2024/05/22 11:56
使用Intent传递自定义对象的两种实现方式对比:Serializable vs Parcelable
Intent 翻译过来是“意图”、“目的“的意思,就像中国旧社会的媒婆,往返于男女双方,传达信息。在程序中我们可以借助 Intent 启动活动、发送广播、启动服务等,除此之外,我们还可以在 Intent 中添加一些附加数据以达到传值的效果。Intent 实例有很多方法,比如putExtra()方法,常见的数据类型它都支持。但是当我们想去传递一些自定义对象的时候这些方法就无能为力了。这里我们介绍两种使用 Intent 传递对象的实现方式,分别是 Serializable 方式和 Parcelable 方式。
Serializable 接口
Serializable 是 Java 提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化的操作。Serializable 是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。序列化的方法很简单,只需让一个类实现 Serializable 接口就可以了,获取对象时调用getSerializableExtra()方法就可以得到通过参数传递过来的序列化对象。注意,实现 Serializable 接口的同时我们还可以声明一个 serialVersionUID,它是用来辅助序列化和反序列化过程的,原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常地被反序列化。
Parcelable 接口
Parcelable 方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是 Intent 所支持的数据类型,这样也就实现传递对象的功能了。获取对象时调用getParcelableExtra()方法就可以了。在序列化过程中需要实现的功能有序列化、反序列化和内容描述。序列化功能由writeToParcel方法来完成,最终是通过 Parcel 中的一系列 write 方法来完成的;反序列化功能由 CREATOR 来完成,其内部标明了如何创建序列化对象和数组,并通过 Parcel 的一系列 read 方法来完成反序列化过程;内容描述功能由 describeContents方法完成,几乎在所有情况下这个方法都应该返回0,仅当当前对象中存在文件描述符时,此方法返回1。
后记
Serializable 的优点是简单易用,它是一种标识接口,这意味着无需实现方法,Java 便会对这个对象进行高效的序列化操作;缺点是使用了反射,序列化和反序列化过程需要大量I/O操作,序列化的过程较慢。这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收且比较耗资源。
Parcelable 的优点是效率高,速度之上,是 Android 中的序列化方式,更适合用在 Android 平台上。根据 Google 工程师的说法,实现 Parcelable 接口的类中的代码会执行的特别快。原因之一就是我们已经清楚地知道了序列化的过程,而不需要使用反射来推断。同时为了更快地进行序列化,对象的代码也需要高度优化。因此,很明显实现 Parcelable 并不容易,需要写大量的模板代码,这使得代码变得难以阅读和维护。不过,正所谓「懒就是生产力」,有人已开发Parcelable 插件,可以大大提高开发效率。
- 关于android中对象的传输
- RESTEasy关于传输对象的小结
- 关于Socket传输对象
- 关于axis 使用过程中传输对象序列化的问题
- java中传输对象时候的问题
- java中传输对象时候的问题
- 关于android端的json传输
- 最近关于android传输的问题
- android socket对象传输
- android意图对象Intent的同应用中跳转功能及其五种传输数据方式
- 关于rpc传输的问题,一定要是对象
- android AIDL中数据的传输
- socket对象的传输
- activemq 对象的传输
- java中传输对象时候的问题(转)
- 关于android图片的传输,android图片传输方式,xml传输图片,android 使用base64编码图片使用xml传输图片
- 关于axis1.4中提高传输性能的分析
- 关于intent中传输字符串丢失的解决…
- foreach语句使用总结
- java单例模式自动生成编号
- How to set up minimal Redhat 7.3
- Android5.1 PIN/PUK flow
- 关注2017新技术--会话系统Conversational Systems
- 关于android中对象的传输
- 题目1129:Skew数
- XAMPP端口占用
- fMRI数据分析处理原理及方法
- 深刻理解React(-) --JSX和虚拟DOM
- 偷懒的小X vijos 1469/jzoj/ssl 排序+分治
- 拼sql语句统计表中数据
- IE下动态 生成<li><a><img>等标签
- 使用java实现后进先出的堆栈功能【笔试题】