其含义就是将一个对象转换为可存储或者可传输的状态。序列化之后的对象可以在网络上进行传输,也可以存储到本地。至于序列化非常简单,只需要他们继承Serializable或者Parcelable即可
推荐使用Parcelable,因为根据其原理,比较节省性能
Serializable
package com.example.serializabledemo.model
import java.io.Serializable
class Person : Serializable {
var name = ""
var age = 0
}
package com.example.serializabledemo
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.serializabledemo.model.Person3
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val person = intent.getSerializableExtra("person_data") as Person
Log.d("Person is ", person.age.toString())
}
}
Parcelable
- 原理是将对象进行分解,每一部分都是Intent支持的类型,所以性能更好,更为推荐
- 第一种方式:
package com.example.serializabledemo.model
import android.os.Parcel
import android.os.Parcelable
class Person2 : Parcelable {
var name: String = ""
var age: Int = 0
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(name)
dest.writeInt(age)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Person> {
override fun createFromParcel(source: Parcel): Person {
val person = Person()
person.name = source.readString() ?: ""
person.age = source.readInt()
return person
}
override fun newArray(size: Int): Array<Person?> {
return arrayOfNulls(size)
}
}
}
package com.example.serializabledemo.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
class Person3(var name: String, var age: Int) : Parcelable
package com.example.serializabledemo
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.serializabledemo.model.Person3
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val person = intent.getParcelableExtra("person_data") as Person3
Log.d("Person is ", person.age.toString())
}
}