Middle
Qual é a diferença entre Serializable e Parcelable no Android?
sobes.tech IA
Resposta da IA
A principal diferença está no desempenho e na forma de implementação.
-
Serializable:- Interface padrão do Java SE.
- Mais fácil de implementar (basta implementar a interface).
- Usa Java Reflection API para serialização, o que é mais lento e requer mais memória.
- Adequado para objetos pequenos ou quando o desempenho de serialização não é crítico.
-
Parcelable:- Interface específica para o SDK Android.
- Requer uma descrição explícita do processo de serialização/deserialização.
- Muito mais rápido e eficiente em uso de memória, pois não depende de Reflection.
- Melhor escolha para transferir objetos entre componentes do Android (Activity, Service, BroadcastReceiver) e para salvar estado.
Para implementar Parcelable, é necessário:
- Implementar a interface
Parcelable. - Implementar o método
writeToParcel()para escrever dados emParcel. - Implementar o método
describeContents(). - Criar um objeto estático
CREATOR, que é uma implementação da interfaceParcelable.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);
}
}
Tabela comparativa:
| Característica | Serializable | Parcelable |
|---|---|---|
| Biblioteca | java.io |
android.os |
| Desempenho | Baixo (usa Reflection) | Alto |
| Eficiência de memória | Baixa | Alta |
| Implementação | Mais simples | Mais complexa |
| Uso | Java geral, pequenos dados | Android, transferência entre componentes |