android serializable parcelable

¿Está mal serializable en Android?



parcelable (4)

He estado leyendo muchas publicaciones y artículos que exaltan la velocidad de Parcelable sobre Serializable. He estado usando ambos por un tiempo para pasar datos entre Actividades a través de Intentos, y aún no he notado ninguna diferencia de velocidad al cambiar entre los dos. La cantidad típica de datos que tengo que transferir es de 5 a 15 objetos anidados con 2 a 5 campos cada uno.

Ya que tengo alrededor de 30 clases que deben ser transferibles, la implementación de Parcelable requiere una gran cantidad de código repetitivo que agrega tiempo de mantenimiento. Uno de mis requisitos actuales es también que el código compilado debe ser lo más pequeño posible; Espero que pueda ahorrar algo de espacio utilizando Serializable sobre Parcelable.

¿Debo usar Parcelable o no hay razón para usarlo en Serializable para cantidades tan pequeñas de datos? ¿O hay otra razón por la que no debería usar Serializable?


¿Alguien ha considerado la serialización utilizando JSON y pasar los datos como una cadena? GSON y Jackson deben ser lo suficientemente eficientes como para ser competidores de Parcelable y Serializable.


Continuar usando la serialización. Verá muchas personas en línea que le dirán que la serialización es muy lenta e ineficiente. Eso es correcto. Pero, una cosa que nunca querrá hacer como programador informático es tomar cualquier comentario sobre el rendimiento como un absoluto.

Pregúntese si la serialización está ralentizando su programa. ¿Te das cuenta cuando va de actividad a actividad? ¿Te das cuenta cuando salva / carga? Si no, está bien. No obtendrá una huella más pequeña cuando vaya a un montón de código de serialización manual, por lo que no hay ninguna ventaja allí. Entonces, ¿qué pasa si es 100 veces más lento que una alternativa si 100 veces más lento significa 10 ms en lugar de 0,1 ms? Tú tampoco vas a ver, así que a quién le importa? Y, ¿por qué alguien invertiría un esfuerzo masivo en escribir la serialización manual para 30 clases cuando no supondría una diferencia perceptible en el rendimiento?


Para uso en memoria, Parcelable es mucho, mucho mejor que Serializable. Recomiendo encarecidamente no usar Serializable.

No puede usar Parcelable para los datos que se almacenarán en el disco (porque no tiene buenas garantías sobre la consistencia de los datos cuando cambian las cosas), sin embargo, Serializable es lo suficientemente lento como para que yo recomiendo no usarlo allí. Es mejor que escribas los datos tú mismo.

Además, uno de los problemas de rendimiento con Serializable es que termina girando a través de muchos objetos temporales, lo que provoca mucha actividad de GC en su aplicación. Es bastante atroz. :}


Todos simplemente declaran ciegamente que Parcelable es mejor y más rápido que Serializable, pero nadie ha intentado respaldar sus afirmaciones con ninguna prueba. Decidí probar esto yo mismo y obtuve resultados muy interesantes.

La serialización Java habitual en un dispositivo Android promedio (si se hace correctamente) es aproximadamente 3.6 veces más rápida que Parcelable para escrituras y aproximadamente 1.6 veces más rápida para lecturas.

Puede consultar mi proyecto de prueba aquí: bitbucket.org/afrishman/androidserializationtest