Según tengo entendido, Bundle
y Parcelable
pertenece a la forma en que Android realiza la serialización. Se usa, por ejemplo, para pasar datos entre actividades. Pero me pregunto, si hay algún beneficio en usar en Parcelable
lugar de la serialización clásica en caso de guardar el estado de mis objetos comerciales en la memoria interna, por ejemplo. ¿Será más simple o más rápido que la forma clásica? ¿Dónde debo usar la serialización clásica y dónde es mejor usar paquetes?
fuente
getBundle
método, luego lo llamo desdewriteToParcel
asdest.writeBundle(getBundle());
y tengo ambas opciones disponibles en el objeto automáticamente. Hay características interesantes de Parcel para objetos en vivo que se indican aquí: developer.android.com/reference/android/os/Parcel.htmlSerializable
es cómicamente lento en Android. Límite inútil en muchos casos de hecho.Parcel
yParcelable
son increíblemente rápidos, pero su documentación dice que no debe usarlo para la serialización de propósito general en el almacenamiento, ya que la implementación varía con las diferentes versiones de Android (es decir, una actualización del sistema operativo podría romper una aplicación que dependía de él).La mejor solución para el problema de serializar los datos para almacenarlos a una velocidad razonable es rodar los suyos. Yo personalmente uso una de mis propias clases de utilidad que tiene una interfaz similar
Parcel
y que puede serializar todos los tipos estándar de manera muy eficiente (a expensas de la seguridad de tipos). Aquí hay una versión resumida:fuente
Vea lo rápido que es Parcelable que Serializable.
de POR QUÉ AMAMOS LOS PARCELABLES
de Parcelable vs Serializable
fuente
Si necesita serialización, por ejemplo, con fines de almacenamiento, pero desea evitar la penalización de velocidad de reflexión incurrida por la interfaz serializable , debe crear explícitamente su propio protocolo de serialización con la interfaz Externalizable .
Cuando se implementa correctamente, esto coincide con la velocidad de Parcelable y también tiene en cuenta la compatibilidad entre diferentes versiones de Android y / o la plataforma Java.
Este artículo también podría aclarar las cosas:
¿Cuál es la diferencia entre serializable y externalizable en Java?
En una nota al margen, también es la técnica de serialización más rápida en muchos puntos de referencia, superando a Kryo, Avro, Protocol Buffers y Jackson (json):
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
fuente
Parece que hoy en día la diferencia no es tan notoria, al menos no cuando lo ejecutas entre tus propias actividades.
Según las pruebas mostradas en este sitio web , Parcelable es aproximadamente 10 veces más rápido en los dispositivos más nuevos (como nexus 10) y es aproximadamente 17 más rápido en los antiguos (como desire Z)
por lo que depende de usted decidir si vale la pena.
tal vez para clases relativamente pequeñas y simples, Serializable está bien, y para el resto, debe usar Parcelable
fuente
Parcelable se relaciona principalmente con IPC utilizando la infraestructura de Binder , donde los datos se pasan como Parcels .
Dado que Android depende mucho de Binder para la mayoría, si no todas, las tareas de IPC, tiene sentido implementar Parcelable en la mayoría de los lugares, y especialmente en el marco, porque permite pasar un objeto a otro proceso si lo necesita. Hace que los objetos sean "transportables".
Pero si tiene una capa empresarial no específica de Android que usa ampliamente serializables para guardar estados de objetos, y solo necesita almacenarlos en el sistema de archivos, entonces creo que serializable está bien. Permite evitar el código placa caldera Parcelable.
fuente
Basado en este artículo http://www.mooproductions.org/node/6?page=5 Parcelable debería ser más rápido.
Lo que no se menciona en el artículo es que no creo que los objetos serializables funcionen en AIDL para servicios remotos.
fuente
Solo uso GSON -> Serializar a JSON String -> Restaurar objeto desde JSON String.
fuente
También Parcelable ofrece una implementación personalizada en la que el usuario tiene la oportunidad de agrupar cada uno de sus objetos anulando writeToParcel (). Sin embargo, la serialización no incluye esta implementación personalizada ya que su forma de pasar datos implica la API de reflexión JAVA.
fuente