2012-06-18 13 views
32

Quiero saber exactamente,¿cuál es la diferencia entre parcelable y serialización utilizado en Android

  1. si debería o utilizado parcelableserialization técnica para enviar datos de una actividad a otra?
  2. ¿es obligatorio usar para enviar datos de uno a otro?
  3. ¿Cuándo debería usarlos?
  4. y la diferencia exacta entre ellos y el rendimiento de ambos en aspectos java.

Gracias de antemano.


public class GetSetClass implements Serializable { 
    private int dt = 10; 

    /** pass any object, drwabale */ 
    public int getDt() { 
     return dt; 
    } 

    public void setDt(int dt) { 
     this.dt = dt; 
    } 
} 
+5

Quizás quiso pasar por estos - http://stackoverflow.com/questions/3323074/android-difference-between-parcelable- and-serializable y http://stackoverflow.com/questions/5550670/benefit-of-using-parcelable-instead-of-serializing-object? – verisimilitude

+3

Use mayúsculas para comenzar un nombre de clase (_GetSetClass_ o _Getsetclass_). – keyser

+0

¿Cuál es la necesidad de serializar objetos en Android? ¿No podemos realizar la tarea sin serializar los objetos? – SRam

Respuesta

19

si debería utilizarse técnica parcelable o serialización para enviar datos de una actividad a otra.

Si va a enviar un tipo de datos no primitivos/objeto a otro a través de la actividad intent que tiene que sea Serialize o implementar Parcelable para ese objeto. La técnica preferida es Parcelable ya que no afecta el rendimiento.

es obligatorio utilizar uno de ellos para enviar datos de uno a otro./¿Cuándo debería usarlos?

Solo es obligatorio/usado para enviar objetos de datos de tipo no primitivo.

y la diferencia exacta entre ellos y el rendimiento de ambos en aspectos Java.

La serialización no afecta el rendimiento. Para obtener más información, consulte este enlace Android Parcelable and Serializable

+0

@hi arun George, .. ¿por qué debería usar la serialización solo para tipos de datos no primitivos? y por qué es obligatorio solo para tipo de dat no primitivo? – SRam

+2

Los tipos de datos primitivos se pueden pasar de una actividad a otra usando 'intent.putExtras (String id, PRIMITIVE_DATA_TYPE)' y se puede acceder a ellos en la otra actividad utilizando el getMethod() equivalente para ese tipo. Pero tal no es el caso para los tipos de datos definidos por el usuario y, por lo tanto, debe usar 'serialización' o' Parcelable'. –

+1

ok gracias por responder una pregunta más ... ¿cuándo deberíamos usar Bundle para enviar datos y cuál es la necesidad de poner el objeto en la intención Bundle?putExtras (String id, PRIMITIVE_DATA_TYPE) si utilizamos la serialización para enviar datos ... – SRam

2

tanto el parcelamiento como la serialización son formas de ordenar y desglosar los datos. en android esto se usa para pasar tipos de datos no primitivos entre componentes y procesos. en general, Android permite objetos serializables o parcelables, por lo que puede elegir su método. la excepción a eso es con las interfaces AIDL. los objetos deben ser parcelables para ser pasados ​​/ devueltos.

serialización utiliza la reflexión para organizar automáticamente y anular los datos. en la mayoría de los casos, la implementación de la interfaz de marcador es suficiente para que funcione. con el parcelamiento, debe escribir el código para ordenar y desempaquetar los datos usted mismo.

y por lo tanto, es por eso que el parcelamiento es más rápido. el objeto no necesita ser reflejado para descubrir los campos. es el reflejo que lo hace lento.

serialización también tiene control de versiones incorporado ... si intenta desasignar a una versión diferente de la clase del objeto que se organizó, el proceso fallará de manera predecible. con el parcelamiento, puede hacer lo mismo, pero debe implementarlo usted mismo agregando un "campo de versión a su objeto" y un código que verifique la versión cuando se desmarque.

Dicho esto, suelo utilizar la serialización. con objetos simples no notarás la diferencia. siempre puede cambiar para usar el parcelamiento más adelante en el desarrollo si descubre problemas de rendimiento.

3

Java serializable: - Serializable viene de Java estándar y es mucho más fácil de poner en práctica todo lo que tiene que hacer es implementar la interfaz Serializable y añadir dos métodos de anulación.
El problema con Serializable es que trata de manejar adecuadamente todo bajo el sol y utiliza una gran cantidad de reflexión para determinar los tipos que se están serializando. Entonces se convierte en un Objeto gordo.

androides parcelable: - Android comunicación entre procesos (AIPC) presentar a decir cómo es Android deben reunir y deserializar su object.It es menos genérico y no utilizar la reflexión por lo que debe tener mucho menos gastos generales y sea mucho más rápido

leer más de http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development

+0

Resaltar el problema con la serialización da a esta respuesta mi +1 –

25

Estos conceptos están relacionados con el Proceso de Comunicación Inter (IPC).

Al enviar datos entre dos aplicaciones, debemos asegurarnos de que ambas aplicaciones comprendan el formato de los datos que se envían.

Especialmente cuando está enviando valores de tipo de datos no primitivos como clases y objetos entre dos aplicaciones, tenemos que convertirlos al formato comprensible del sistema operativo. O.S entiende solo los tipos primitivos (ints, chars, etc.). El motivo de la conversión es que tenemos que canal de comunicación O.S para transmitir los datos.

Este proceso de conversión de tipos no primitivos a primitivos y el envío a otra aplicación a través de un canal de comunicación se denomina Serialización. El proceso inverso se llama De serialización.

En Java, IPC depende en gran medida de las serializaciones para la serialización. Pero la serialización está diseñada teniendo en cuenta las aplicaciones de escritorio. Cuando realice IPC en aplicaciones móviles, debemos asegurarnos de que el proceso de IPC no sea demasiado pesado.

En términos simples, la serialización es un concepto pesado para IPC. Por lo tanto, en lugar de Serialization, Android optó por Binders para lograr una comunicación ligera entre procesos. Binders internamente depende en gran medida de las parcelas, para hacer el IPC. Los paquetes son serializables livianos. Se prefiere usar parcelas para ordenar objetos en flujos de bytes.

Nota: Binder IPC depende en gran medida del concepto de memoria compartida para asegurarse de que no haya mucha duplicación de datos mientras se comparte entre las aplicaciones.

+4

No tengo idea de por qué esta respuesta no tiene ningún voto hasta ahora, es bastante completa y para ser honesto, uno de los mejores para mí. – GoRoS

+0

@vsvankhede Bueno, parece que hay un momento y lugar para todo y actualmente es el más votado. – GoRoS

5

Tiene una muy buena explicación de la diferencia entre Parcelable y Serialización.

Para comenzar con su pregunta, sin embargo ha sido un largo tiempo, puede ayudar a los demás:

  1. si debería utilizadas técnica parcelable o serialización para el envío de datos de una actividad a otra?

Respuesta: parcelable es la mejor opción (por eso se explica más adelante).

  1. ¿Es obligatorio utilizar uno de ellos para enviar datos de uno a otro?

Respuesta: Sí, como el envío de datos (objeto) de una a otra requiere flujos de bytes a ser escrita y se recuperaron y que se puede hacer ya sea a través parcelable o serialización.

  1. cuándo debería usarlos?

Respuesta: Esta parte le contestó arleady es decir, pasar datos de una actividad a otra.

  1. y la diferencia exacta entre ellos y el rendimiento de ambos en aspectos java.

Respuesta: 1. Parcelable está bien documentado en el SDK de Android; la serialización, por otro lado, está disponible en Java.

  1. En Parcelable, los desarrolladores escriben código personalizado para calcular y desasignar, por lo que crea menos objetos basura en comparación con la serialización. El rendimiento de Parcelable sobre Serialización mejora drásticamente (alrededor de dos veces más rápido), debido a esta implementación personalizada.

  2. La serialización es una interfaz de marcador, lo que implica que el usuario no puede ordenar los datos de acuerdo con sus requisitos. En la serialización, se realiza una operación de cálculo de referencias en una máquina virtual Java (JVM) utilizando la API de reflejo de Java. Esto ayuda a identificar el miembro y el comportamiento de los objetos Java, pero también termina creando muchos objetos basura. Debido a esto, el proceso de serialización es lento en comparación con Parcelable.

respuesta tomado de: this link

Ver también: serialization explained

Cuestiones relacionadas