android 关于intent传递类对象的几种方式
2015-05-06 10:52
417 查看
Android中,Activity和Fragment之间传递对象,可以通过将对象序列化并存入Bundle或者Intent中进行传递,也可以将对象转化为JSON字符串,进行传递。
序列化对象可以使用Java的
Model
传递数据
接收数据
Model
传递数据
接收数据
实现
describeContents方法。内容接口描述,默认返回0就可以;
writeToParcel方法。将传递的数据打包到Parcel容器中。
除了要实现这两个方法还必须创建一个
Model
传递数据
接收数据
经过测试,我们得到下图的效果
可以看出,通过转换为字符串的速度是最慢的。Seralizable次之,Parcelable比Seralizable快10倍。所以从性能上考 虑,我们必定优先选择Parcelable。但是Parcelable有大量重复的模板代码,如何简化这些操作,将是下面主要讲解的内容。
如果你使用android Studio 可以通过安装android-parcelable-intellij-plugin插件,或者自己配置模板进行操作。
除了上面的操作,还有大量的第三方库来简化Parcelable操作。当然使用这些库也许会降低Parcelable的性能。Parceler就是这样一个库。
Parceler使用非常简单,在定义Model时用
Model
传递对象
接收对象
除了Parceler之外,还有如auto-parcel,ParcelableCodeGenerator,ParcelableGenerator等第三方库,这里我将不进行讲解,有兴趣的朋友,可以自行研究。
序列化对象可以使用Java的
Serializable的接口、
Parcelable接口。转化成JSON字符串,可以使用
Gson等库。
1.Serializable
Model
2.转化为JSON字符串
Model
3.使用Parcelable
实现Parcelable接口需要实现两个方法
describeContents方法。内容接口描述,默认返回0就可以;
writeToParcel方法。将传递的数据打包到Parcel容器中。
除了要实现这两个方法还必须创建一个
Parcelable.Creator接口的实例,用于读取Parcel容器中的数据
Model
4.性能分析
经过测试,我们得到下图的效果可以看出,通过转换为字符串的速度是最慢的。Seralizable次之,Parcelable比Seralizable快10倍。所以从性能上考 虑,我们必定优先选择Parcelable。但是Parcelable有大量重复的模板代码,如何简化这些操作,将是下面主要讲解的内容。
5.简化Parcel操作
如果你使用android Studio 可以通过安装android-parcelable-intellij-plugin插件,或者自己配置模板进行操作。
5.1 parceler
除了上面的操作,还有大量的第三方库来简化Parcelable操作。当然使用这些库也许会降低Parcelable的性能。Parceler就是这样一个库。Parceler使用非常简单,在定义Model时用
@Parcel进行注解,在传递数据的时候使用
Parcels的
wrap方法来包装成一个
Parcelable对象。获取数据时用
Parcels的
unwrap方法来获取对象。
Model
相关文章推荐
- Android Intent参数传递,包括对象复杂集合等多方式传递
- Android实用开发技巧之二:用Serializable方式及Parcelable方式实现Intent传递对象功能
- Intent传递对象的几种方式
- Intent传递对象的几种方式
- Android中Intent传递对象的3种方式详解(Serializable、Parcelable、JSON)
- Android --- 使用Intent传递对象的方式
- Intent传递对象的几种方式
- 关于android pendingIntent 传递Parcelable对象时数据丢失问题
- Android系列之Intent传递对象的几种实例方法
- Android中Intent传递对象的3种方式详解
- Android之使用 Intent 传递对象(一)Serializable 方式
- Android之使用 Intent 传递对象(一)Parcelable 方式
- Android使用Intent传递对象的两种方式
- Intent传递对象的几种方式
- Android开发 关于避免切换主题时免闪屏的几种方式
- Android intent传递hashMap对象,遍历hashMap,改变menu状态
- Android实现Intent传递对象
- Android--通过Intent使用Bundle如何传递对象
- Android Intent传递对象 Serializable & Parcelable
- React Native原生模块向JS传递数据的几种方式(Android)