O que é serialização e análise de objetos no Android?
sobes.tech IA
Resposta da IA
A serialização é o processo de transformar um objeto numa sequência de bytes para armazenamento (por exemplo, num ficheiro ou base de dados) ou transmissão (por exemplo, através de rede).
O parsing (ou deserialização) é o processo inverso: restaurar um objeto a partir de uma sequência de bytes.
No Android, para esses fins, geralmente usam-se Serializable ou Parcelable.
Serializable (interface padrão do Java): fácil de usar (apenas precisa implementar a interface), mas mais lento que Parcelable e cria muitos objetos temporários.
// Exemplo Serializable
import java.io.Serializable;
public class MySerializableObject implements Serializable {
private static final long serialVersionUID = 1L; // Recomenda-se especificar
private String name;
private int age;
public MySerializableObject(String name, int age) {
this.name = name;
this.age = age;
}
// Getters e setters
}
Parcelable (interface específica do Android): mais rápido e eficiente que Serializable, pois é otimizado para IPC (Comunicação entre Processos). Requer mais código para implementar.
// Exemplo Parcelable
import android.os.Parcel;
import android.os.Parcelable;
public class MyParcelableObject implements Parcelable {
private String name;
private int age;
public MyParcelableObject(String name, int age) {
this.name = name;
this.age = age;
}
// Constructor para deserialização
protected MyParcelableObject(Parcel in) {
name = in.readString();
age = in.readInt();
}
// Creator para criar instâncias a partir de Parcel
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; // Sempre 0 para a maioria dos objetos
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
// Getters e setters
}
Comparação:
| Funcionalidade | Serializable | Parcelable |
|---|---|---|
| Interface | java.io.Serializable |
android.os.Parcelable |
| Performance | Mais lento | Mais rápido |
| Facilidade de uso | Mais fácil (menos código) | Mais difícil (mais código) |
| Uso | Java geral | Android (IPC, Bundles, Intents) |
| Criação de objetos | Mais objetos temporários | Menos objetos temporários |
Parcelable é preferido para transferência de dados entre componentes de aplicações Android (por exemplo, através de Intent ou Bundle).