Junior
Cosa sono gli oggetti serializzabili e parcelabili?
sobes.tech AI
Risposta dell'AI
Gli oggetti serializzabili possono essere convertiti in un flusso di byte per l'archiviazione o la trasmissione, utilizzando il meccanismo standard di Java java.io.Serializable.
Gli oggetti Parcelable possono anche essere impacchettati e scompattati, ma utilizzano un meccanismo specializzato di Android android.os.Parcelable. Questo meccanismo è più efficiente per il trasferimento di dati tra componenti Android, poiché è ottimizzato per IPC (Comunicazione Inter-Processo).
| Caratteristica | Serializable |
Parcelable |
|---|---|---|
| Meccanismo | Riflessione Java | API di Parceling di Android |
| Prestazioni | Meno efficiente (usa riflessione) | Più efficiente |
| Implementazione | Più semplice (interfaccia di marker) | Richiede l'implementazione dei metodi writeToParcel, createFromParcel, describeContents |
| Utilizzo | Applicazioni Java standard, chiamate RMI | Specifico di Android, trasferimento di dati tra attività, servizi, ecc. |
| Template | Meno codice | Più codice |
Esempio di implementazione di Parcelable:
// MyParcelableObject.java
package com.example.myapplication;
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private String name;
private int value;
public MyParcelableObject(String name, int value) {
this.name = name;
this.value = value;
}
protected MyParcelableObject(Parcel in) {
name = in.readString();
value = in.readInt();
}
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; // Di solito 0, se non ci sono descrittori di file speciali
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (omessi per brevità)
}