Junior
O que são objetos serializáveis e parceláveis?
sobes.tech IA
Resposta da IA
Objetos serializáveis podem ser convertidos em fluxo de bytes para armazenamento ou transmissão, usando o mecanismo padrão do Java java.io.Serializable.
Objetos parceláveis também podem ser empacotados e desempacotados, mas usam um mecanismo especializado do Android android.os.Parcelable. Este mecanismo é mais eficiente para transferência de dados entre componentes do Android, pois é otimizado para IPC (Comunicação entre Processos).
| Característica | Serializable |
Parcelable |
|---|---|---|
| Mecanismo | Reflexão em Java | API de Parceling do Android |
| Desempenho | Menos eficiente (usa reflexão) | Mais eficiente |
| Implementação | Mais simples (interface de marcador) | Requer implementação dos métodos writeToParcel, createFromParcel, describeContents |
| Uso | Aplicação Java padrão, chamadas remotas (RMI) | Específico do Android, transferência de dados entre atividades, serviços, etc. |
| Modelo | Menos código | Mais código |
Exemplo de implementação de 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; // Normalmente 0, se não houver descritores de arquivo especiais
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(value);
}
// Getters (omitidos por brevidade)
}