Pelo que entendi, Bundle
e Parcelable
pertence à forma como o Android realiza a serialização. É usado, por exemplo, na passagem de dados entre atividades. Mas eu me pergunto, se há algum benefício em usar em Parcelable
vez da serialização clássica no caso de salvar o estado dos meus objetos de negócios na memória interna, por exemplo? Será mais simples ou mais rápido do que a forma clássica? Onde devo usar a serialização clássica e onde melhor usar bundles?
fonte
getBundle
método e o chamo dewriteToParcel
asdest.writeBundle(getBundle());
e tenho as duas opções disponíveis no objeto automaticamente. Há recursos interessantes do Parcel para objetosSerializable
é comicamente lento no Android. Limite inútil em muitos casos, na verdade.Parcel
eParcelable
são fantasticamente rápidos, mas sua documentação diz que você não deve usá-lo para serialização de propósito geral para armazenamento, uma vez que a implementação varia com diferentes versões do Android (ou seja, uma atualização de sistema operacional pode quebrar um aplicativo que dependia dele).A melhor solução para o problema de serialização de dados para armazenamento em uma velocidade razoável é rolar o seu próprio. Eu pessoalmente uso uma de minhas próprias classes de utilitário que tem uma interface semelhante
Parcel
e que pode serializar todos os tipos padrão de forma muito eficiente (às custas da segurança de tipo). Aqui está uma versão resumida disso:fonte
Ver o quão rápido Parcelable é que Serializable.
de POR QUE AMAMOS PARCELÁVEL
de Parcelable vs Serializable
fonte
Se você precisa de serialização para fins de armazenamento, por exemplo, mas deseja evitar a penalidade de velocidade de reflexão incorrida pela interface serializável , você deve criar explicitamente seu próprio protocolo de serialização com a interface externalizável .
Quando implementado corretamente, ele corresponde à velocidade do Parcelable e também leva em conta a compatibilidade entre as diferentes versões do Android e / ou da plataforma Java.
Este artigo também pode esclarecer as coisas:
Qual é a diferença entre Serializable e Externalizable em Java?
Em uma nota lateral, também é a técnica de serialização mais rápida em muitos benchmarks, vencendo Kryo, Avro, Protocol Buffers e Jackson (json):
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
fonte
Parece que hoje em dia a diferença não é tão perceptível, pelo menos não quando você o executa entre suas próprias atividades.
De acordo com os testes mostrados neste site , o Parcelable é cerca de 10 vezes mais rápido nos dispositivos mais novos (como o Nexus 10) e cerca de 17 vezes mais rápido nos antigos (como o wish Z)
então cabe a você decidir se vale a pena.
talvez para classes relativamente pequenas e simples, Serializable é bom, e para o resto, você deve usar Parcelable
fonte
Parcelable está principalmente relacionado ao IPC usando a infraestrutura Binder , onde os dados são passados como Parcels .
Como o Android depende muito do Binder para a maioria, senão todas, as tarefas IPC, faz sentido implementar Parcelable na maioria dos lugares, e especialmente na estrutura, porque permite passar um objeto para outro processo, se necessário. Torna os objetos "transportáveis".
Mas se você tiver uma camada de negócios não específica do Android que usa extensivamente serializáveis para salvar estados de objeto e só precisa armazená-los no sistema de arquivos, então acho que serializável está bem. Permite evitar o código Parcelable Boiler-plate.
fonte
Com base neste artigo http://www.mooproductions.org/node/6?page=5 Parcelable deve ser mais rápido.
O que não foi mencionado no artigo é que não acho que objetos serializáveis funcionarão em AIDL para serviços remotos.
fonte
Eu apenas uso GSON -> Serializar para String JSON -> Restaurar Objeto da String JSON.
fonte
Além disso, Parcelable oferece implementação customizada em que o usuário tem a chance de particionar cada um de seus objetos substituindo writeToParcel (). No entanto, a serialização não faz essa implementação customizada, pois sua maneira de passar dados envolve a API de reflexão JAVA.
fonte