Middle
Qual è la differenza tra Serializable e Parcelable in Android?
sobes.tech AI
Risposta dell'AI
La principale differenza risiede nelle prestazioni e nel metodo di implementazione.
-
Serializable:- Interfaccia standard di Java SE.
- Più semplice da implementare (basta implementare l'interfaccia).
- Utilizza Java Reflection API per la serializzazione, che è più lenta e richiede più memoria.
- Adatto per oggetti di piccole dimensioni o quando le prestazioni di serializzazione non sono critiche.
-
Parcelable:- Interfaccia specifica per Android SDK.
- Richiede una descrizione esplicita del processo di serializzazione/deserializzazione.
- Molto più veloce ed efficiente in termini di utilizzo della memoria, poiché non si basa sulla Reflection.
- La scelta migliore per trasferire oggetti tra componenti Android (Activity, Service, BroadcastReceiver) e per salvare lo stato.
Per implementare Parcelable, è necessario:
- Implementare l'interfaccia
Parcelable. - Implementare il metodo
writeToParcel()per scrivere i dati inParcel. - Implementare il metodo
describeContents(). - Creare un oggetto statico
CREATOR, che è un'implementazione diParcelable.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);
}
}
Tabella comparativa:
| Caratteristica | Serializable | Parcelable |
|---|---|---|
| Biblioteca | java.io |
android.os |
| Prestazioni | Bassa (usa Reflection) | Alta |
| Efficienza memoria | Bassa | Alta |
| Implementazione | Più semplice | Più complessa |
| Uso | Java generale, piccoli dati | Android, trasferimento tra componenti |