VOCÊ ESTÁ EM: Home > Radar > Dica do Dia > Desenvolvimento Android – Parcelable
Desenvolvimento Android – Parcelable
02/10/2014

androiddev-300x1571Um item muito comum a todo desenvolvedor JAVA é ter que em determinado momento serializar um objeto, ou seja, escrever os valores e estrutura de um objeto em metadados de forma a realizar o translado desta informação outra parte de um sistema ou mesmo persistir o dado para que possa ser utilizado em outro momento do processo sem a necessidade de utilizar um banco de dados ou escrever complicados mecanismos de escrita de arquivos. Em JAVA a serialização de um objeto é muito simples, bastando implementar a interface Serialize. Deste modo, a JVM consegue de uma forma bem eficiente persistir o objeto para uso futuro.

No Android, a serialização pode ser realizada da mesma maneira para determinados objetos mas quando tratamos da migração de informações entre Activities no aplicativo, devemos utilizar outro tipo de serialização que se dará através do uso de um Parcelable.

Em comparação entre as duas técnicas podemos observar em diversos testes realizados que um objeto serializado a partir de Parcel tem o processo de serialização / desserialização até 100 vezes mais rápido. Mas, entenda bem, estamos falando de diferenças de milissegundos de diferença no processo. Se estamos tratando da passagem de apenas um objeto com poucas propriedades, não há qualquer diferença. Mas imagine uma imensa lista de objetos customizados com, imaginemos, 100.000 itens. Qualquer milissegundo a menos conta.

Para obter um objeto de forma a usar Parcel, basta seguir o roteiro abaixo e verificar o código da Listagem-1:

1) Crie uma classe. Em nosso exemplo, Aluno.
2) Implemente a interface Parcelable.
3) Crie as propriedades, getters e setters da sua classe, normalmente, e implemente os construtores que você desejar.
4) Crie um construtor cujo parâmetro de entrada seja uma variável do tipo Parcel. Esta classe realiza a leitura e gravação de dados serializados.
5) Sobrescreva o método describeContents() da interface Parcelable.
6) Sobrescreva o método writeToParcel da interface, recebendo os parâmetros Parcel e um inteiro com dados de flags.
7) Finalmente, implemente uma variável estática através da classe Creator da Classe Parcelable.

Listagem-1

import android.os.Parcel;
import android.os.Parcelable;

public class Aluno implements Parcelable{
public int Id;
public String Nome;
public int Idade;
public String Email;
public String Foto;

public Aluno(){}

public Aluno(int Id, String Nome, int Idade, String Email, String Foto){
     this.Id = Id;
     this.Nome = Nome;
     this.Idade = Idade;
     this.Email = Email;
     this.Foto = Foto;
}

public Aluno(Parcel in){
     String[] dados = new String[5];
     in.readStringArray(dados);
     this.Id = Integer.parseInt(dados[0]);
     this.Nome = dados[1];
     this.Idade = Integer.parseInt(dados[2]);
     this.Email = dados[3];
     this.Foto = dados[4];
}

@Override
public int describeContents() {
     return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
     dest.writeStringArray(new String[]{
            String.valueOf(this.Id),
            this.Nome,
            String.valueOf(this.Idade),
            this.Email,
            this.Foto
     });
}

public static final Parcelable.Creator CREATOR = new    Parcelable.Creator() {
     public Aluno createFromParcel(Parcel in) {
          return new Aluno(in);
     }

     public Aluno[] newArray(int size) {
          return new Aluno[size];
     }
  };
}

Quer ver mais dicas como esta? Acesse o IAI? em site.iai.art.br