1. Serializable和Parcelable的区别(简单记忆):
Serializable适用于简单的对象序列化,而Parcelable适用于需要更高效的对象序列化和反序列化的情况,特别是在Android开发中。
Serializable
是Java平台的标准接口,适用于普通的对象序列化,使用Java的默认序列化机制,实现简单但性能较低。Parcelable
是Android平台特有的接口,适用于Android环境下的高效对象序列化,需要手动实现序列化和反序列化的逻辑,性能较高。
2. 详细解释:
-
效率
Parcelable的效率更高,比Serializable快10倍以上。因为Parcelable是通过在内存中分配序列化数据的,而Serializable是通过类加载和反射处理的。 -
使用场景
Serializable方便Java中对象的序列化,可将对象存储在存储设备上。而Parcelable主要用于内存序列化
,用于在Activity、Service、Receiver之间传输数据。 -
代码侵入性
Serializable自动序列化,不需要实现任何方法。而Parcelable需要实现writeToParcel和describeContents方法。 -
数据存储
Serializable会将整个对象数据存储,而Parcelable只存储对象具体内容,不存储名称等meta信息。因此Parcelable更省内存。 -
使用难度
Parcelable代码侵入性大,使用略复杂,需要手动实现序列化和反序列化的逻辑。Serializable使用简单,自动完成序列化,但需要处理异常。 -
版本兼容性
Parcelable性能高效,但在一定程度上降低了兼容性。Serializable兼容性更好,可以兼容不同Android版本。
所以一般来说,在内存之间数据传输建议使用Parcelable,跨进程存储建议使用Serializable。
3. 使用Serializable
data class MyData(val name: String, val age: Int, val sex: String) : Serializable {
companion object {
private const val serialVersionUID: Long = 1L
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)