在开发中,若是有须要用到序列化和反序列化的操做,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不一样的场景。算法
Serializable 的优势是实现简单,你只须要实现一个 Serializable 接口,并不须要任何额外的代码,可是它的序列化和反序列化,其实是使用反射作的,因此效率会略低,而且它会在序列化的过程当中,会建立不少临时变量,因此更容易触发 GC。设计模式
Parcelable 须要开发者本身去实现序列化的规则,因此会增长代码量,正是由于规则肯定,因此效率会提升不少,而且不容易触发 GC。函数
在 Android 下,一般我会推荐使用 Parcelable ,可是它须要实现太多模板代码了。那么,有没有办法让它和 Serializable 同样,只通过简单的配置就达到咱们序列化的需求呢?那就看看 Kotlin 新支持的 Parcelize 了。学习
Parcelize 是 Kotlin 在 1.1.4 中,新增长的功能。gradle
若是你须要使用它,先要保证 Android Studio 对 Kotlin 的插件已经升级到 1.1.4 之上的版本,如今的最新版是 1.2.10 ,我这里刚升级了。插件
在新版的 Kotlin 插件中,已经自动包含了一个自动 Parcelable 实现生成器。简单来讲,只须要再主函数中,声明序列化的属性并添加一个 @Parcelize
注解,它将自动为咱们建立 writeToParcel()
和 createFromParcel()
。也就是对开发者而言,只须要加一个 @Parcelize
注解,其余的和正常的类没有区别。设计
在 Kotlin 没有支持 @Parcelize
的时候,咱们使用 Parcelable 的话,写的 Model 类,大概是这样的。3d
而若是使用了 @Parcelize
的话,这些模板代码都是会帮咱们自动生成,咱们只须要增长一个 @Parcelize
注解就行了。code
有没有感受到代码量的减小?cdn
这两个类,编译完之后,其实是一致的。咱们这边反编译以后,看看 UserParcelize()
的代码。
@Parcelize
注解实际上就是帮咱们自动生成了 writeToParcel()
和 createFromParcel()
,其实并无什么高深的地方,可是这一点能够节约咱们的代码量。
@Parcelize
使用起来确实很是的方便,可是在此以前,咱们还要进行一些简单的配置。
前面提到,@Parcelize
是须要 Kotlin 1.1.4 之上的版本才支持,因此你须要保证你的 Kotlin 版本为最新的就行了。升级 Kotlin 如前文所述,直接升级 Kotlin 插件便可。升级完成以后,你能够在 Preferences 中,经过 Kotlin Compiler 查看当前支持的版本,我这里使用的是 1.2 版本。
@Parcelize
是一个实验室功能,因此还须要在 Gradle 中,增长 experimental 配置。
直接使用 @Parcelize
你将面临一个 Lint 的错误提示。固然 AS 已经为咱们作出了解决它的提示。
只须要增长 @SuppressLint("ParcelCreator")
就能够忽略它就能够了。
今天的 Kotlin 小技巧,对你有没有帮助?有什么想法能够在留言区讨论。
今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料,包含:Android反编译、算法、设计模式、虚拟机、Linux、Kotlin、Python、爬虫、Web项目源码。
推荐阅读: