Android中的序列化
在开发中,如果有需要用到序列化和反序列化的操作,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不同的场景。
Serializable
Serializable 的优点是实现简单,你只需要实现一个 Serializable 接口,并不需要任何额外的代码,但是它的序列化和反序列化,实际上是使用反射做的,所以效率会略低,并且它会在序列化的过程中,会创建很多临时变量,所以更容易触发 GC。
Parcelable
Parcelable 需要开发者自己去实现序列化的规则,所以会增加代码量,正是因为规则确定,所以效率会提高很多,并且不容易触发 GC。
如何在 Kotlin 中便捷的使用 Parcelable
在 Kotlin 中使用 Parcelable 序列化有一个简单的方式,那就是利用 Kotlin 在 1.1.4 版本中新增的一个注解
@Parcelize
如果你需要使用它,先要保证 Android Studio 对 Kotlin 的插件已经升级到 1.1.4 之上的版本,现在的最新版是 1.2.10 。
在新版的 Kotlin 插件中,已经自动包含了一个自动 Parcelable 实现生成器。简单来说,只需要再主函数中,声明序列化的属性并添加一个 @Parcelize
注解,它将自动为我们创建 writeToParcel() 和 createFromParcel()。也就是对开发者而言,只需要加一个 @Parcelize 注解,其它的和正常的类没有区别。
使用 @Parcelize
@Parcelize
是一个实验室功能,所以还需要在 Gradle 中,增加 experimental 配置。
android{
...
androidExtensions {
experimental = true
}
...
}
然后在实体类中使用:
@SuppressLint("ParcelCreator")// 用于处理 Lint 的错误提示
@Parcelize
open class BaseBean : Parcelable{}
另外需要注意的是,子类继承 BaseBean 时也是需要添加 @SuppressLint("ParcelCreator")
@SuppressLint("ParcelCreator")
data class UserBean(var name: String = "") : BaseBean() {
}
摘录于 “承香墨影” 公众号