[Android] Principio de serialización Parcelable

 Parcelable es una interfaz de serialización proporcionada por Android. El uso de Parcelable es más complicado que el de Serializable, pero la eficiencia de Parcelable es mucho mayor que la de Serializable. Este siempre ha sido el orgullo de los ingenieros de Google. Se compara la eficiencia de Parcelable y Serializable. con Parcelable. vs Serializable afirma ser 10 veces más rápido en eficiencia

Parcelable es proporcionado por el SDK de Android. Se basa en la memoria. Dado que la velocidad de lectura y escritura de la memoria es más alta que la del disco duro, la transferencia de objetos entre procesos en Android generalmente usa Parcelable.

Generadores de implementos encomendables


kotlin-parcelize El complemento proporciona un  generador de implementación Parcelable  , agregue el siguiente complemento de Gradle a  build.gradle los archivos de su aplicación:

complementos { 
    id("kotlin-parcelize") 
}

Al usar  @Parcelize para agregar anotaciones a una clase, el sistema generará automáticamente una  Parcelable的 implementación, como se muestra a continuación:

import kotlinx.parcelize.Parcelize

@Parcelize
class User(val firstName: String, val lastName: String, val age: Int): Parcelable

要注意的是:@Parcelize Requiere que todas las propiedades de serialización se declaren en el constructor principal.

 Si su clase requiere una lógica de serialización más avanzada, escríbala en alguna clase complementaria:

@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
    private companion object : Parceler<User> {
        override fun User.write(parcel: Parcel, flags: Int) {
            // Custom write implementation
        }

        override fun create(parcel: Parcel): User {
            // Custom read implementation
        }
    }
}

Análisis de código fuente del proceso de serialización Parcelable


 Interfaz parcelable

Hay un método writeToParcel en la interfaz Parcelable

 Vaya a la clase Parcel del método writeToParcel. En comparación con el paquete del servicio de mensajería, Parcel requiere que escribamos datos en Parcel, y luego el destinatario puede obtener los datos del paquete.

 Hay una serie de métodos nativos en Parcel ¿Qué hacen los métodos nativos? El método nativo es escribir nuestro tipo de datos en él.

En general: Parcelable implementa lectura y escritura a través de Parcel, realizando así la serialización y deserialización

 Método básico de serialización parcelable


 private fun test() {
        var parcel:Parcel=Parcel.obtain()
        parcel.writeInt(19)
        parcel.writeInt(12)
        //marshall方法转换成二进制
        val bs=parcel.marshall()
        Log.d("data","bs=${bs.size}")
        //把parcel释放掉
        parcel.setDataPosition(0)
        parcel.recycle()
        //重新获取一个parcel
        parcel=Parcel.obtain()
        //把bs字节流放到parcel里面去
        parcel.unmarshall(bs,0,bs.size)
        //把parcel里面的值读取出来
        val size=parcel.dataSize()
        for(i in 0..size step 4){
            parcel.setDataPosition(i)
            Log.d("data","value=${parcel.readInt()}")
        }
        parcel.recycle()
    }

 Pasar objetos entre procesos Parcelable


Cree una clase de curso que implemente la interfaz Parcelable

@Parcelize
class Course(var name:String, var score:Int) :Parcelable{
}

 Escribe el siguiente código en una actividad.

       val course=Course("数学",99)
        var intent=Intent(this,MainActivity4::class.java)
        intent.putExtra("data",course)
        startActivity(intent)

Escribe el siguiente código en otra actividad. 

        var course=intent.getParcelableExtra<Course>("data")
        if (course != null) {
            Log.d("data","${course.name}---${course.score}")
        }

Visualización de resultados 

 D/datos: Matemáticas---99

Cómo elegir entre Parcelable y Serializable


1. En términos de uso de memoria, Parcelable tiene un mayor rendimiento que Serializable, por lo que se recomienda Parcelable.

2. Serializable generará una gran cantidad de variables temporales durante la serialización, lo que provocará un GC frecuente.

3. Parcelable no se puede utilizar en el caso de almacenar datos en disco, ya que Parcelable no puede garantizar muy bien la continuidad de los datos, en el caso de cambios externos, se recomienda utilizar Serializable.

Supongo que te gusta

Origin blog.csdn.net/weixin_63357306/article/details/128574077
Recomendado
Clasificación