Passagem de dados de um tipo não-primitiva entre as actividades no android
-
10-07-2019 - |
Pergunta
Suponha que você deseja iniciar uma nova atividade e passá-lo alguns dados de atividade atual. Se os dados são de um tipo primitivo, você poderia simplesmente usar uma intenção e adicionar extras, mas como você faria isso por estruturas de dados mais complexos como ArrayLists ou objetos?
Solução
Você tem algumas opções:
- Você poderia envolver a estrutura mais complexa em uma classe que implementa a interface
Parcelable
, que podem ser armazenados em um extra - Você poderia envolver a estrutura mais complexa em uma classe que implementa a interface
Serializable
, que podem ser armazenados em um extra - Você usar membros de dados estáticos para passar coisas ao redor, uma vez que eles estão todos no mesmo processo
- Você usar armazenamento externo (arquivo, banco de dados,
SharedPreferences
) - Como a pessoa que postou observou, use um componente comum, como um
Application
personalizado ou umService
locais
O que você não quer fazer é passar coisas grandes via extras. Por exemplo, se você estiver criando um aplicativo que agarra fotos da câmera, você não quer passar aqueles em extras - usar um membro de dados estáticos (icky como isso soa). Intenções são projetados para cross-processo de trabalho, o que significa que há uma certa quantidade de dados copiando o que se passa, o que você quer evitar quando ele não é necessário para coisas grandes.
Outras dicas
Uma opção Estou ciente está armazenando os dados que você está usando em um objeto Application que todas as suas atividades pode recuperar a partir do contexto.
Eu também ouvi de usar Tampão Google Protocol para alcançar uma maior solução realizando