Middle
¿Cuál es la diferencia entre Serializable y Parcelable en Android?
sobes.tech AI
Respuesta de la IA
La principal diferencia radica en el rendimiento y la forma de implementación.
-
Serializable:- Interfaz estándar de Java SE.
- Más sencillo de implementar (solo hay que implementar la interfaz).
- Utiliza Java Reflection API para la serialización, lo cual es más lento y requiere más memoria.
- Adecuado para objetos pequeños o cuando el rendimiento de serialización no es crítico.
-
Parcelable:- Interfaz específica para Android SDK.
- Requiere una descripción explícita del proceso de serialización/deserialización.
- Mucho más rápido y eficiente en uso de memoria, ya que no depende de Reflection.
- La mejor opción para transferir objetos entre componentes de Android (Activity, Service, BroadcastReceiver) y para guardar estado.
Para implementar Parcelable es necesario:
- Implementar la interfaz
Parcelable. - Implementar el método
writeToParcel()para escribir datos enParcel. - Implementar el método
describeContents(). - Crear un objeto estático
CREATOR, que es una implementación de la interfazParcelable.Creator.
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private int value;
private String name;
public MyParcelableObject(int value, String name) {
this.value = value;
this.name = name;
}
protected MyParcelableObject(Parcel in) {
value = in.readInt();
name = in.readString();
}
public static final Creator<MyParcelableObject> CREATOR = new Creator<MyParcelableObject>() {
@Override
public MyParcelableObject createFromParcel(Parcel in) {
return new MyParcelableObject(in);
}
@Override
public MyParcelableObject[] newArray(int size) {
return new MyParcelableObject[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(value);
dest.writeString(name);
}
}
Tabla comparativa:
| Característica | Serializable | Parcelable |
|---|---|---|
| Biblioteca | java.io |
android.os |
| Rendimiento | Bajo (usa Reflection) | Alto |
| Eficiencia de memoria | Baja | Alta |
| Implementación | Más sencilla | Más compleja |
| Uso | Java general, datos pequeños | Android, transferencia entre componentes |