Supposons que vous vouliez démarrer une nouvelle activité et lui transmettre des données de l'activité en cours. Si les données sont de type primitif, vous pouvez simplement utiliser une intention et ajouter des extras, mais comment le feriez-vous pour des structures de données plus complexes comme des listes d'objets ou des objets?Transmission de données d'un type non-primitif entre des activités dans Android
Répondre
Vous avez quelques options:
- Vous pouvez envelopper la structure plus complexe dans une classe qui implémente l'interface
Parcelable
, qui peut être stocké dans un supplément - Vous pouvez envelopper la structure plus complexe dans une classe qui implémente l'interface
Serializable
, qui peut être stockée dans un supplément - Vous utilisez les membres de données statiques pour passer des choses autour, car ils sont tous dans le même processus
- Vous utilisez le stockage externe (fichier, base de données,
SharedPreferences
) - Comme la personne qui vient de poster noté, utilisez un composant commun, tel comme une coutume
Application
ou localService
Ce que vous ne voulez pas faire est de passer par gros trucs extras. Par exemple, si vous créez une application qui récupère des images de la caméra, vous ne voulez pas les passer dans les extras - utilisez un membre de données statiques (icky comme ça sonne). Les intentions sont conçues pour fonctionner de façon croisée, ce qui signifie qu'il y a une certaine quantité de données à copier, que vous voulez éviter quand ce n'est pas nécessaire pour les gros fichiers.
Une option que je connais est de stocker les données que vous utilisez dans un objet Application que toutes vos activités peuvent extraire du contexte.
J'ai aussi entendu d'utiliser Google Protocol Buffer pour obtenir une solution plus performante
J'ai lu quelques articles se disputant contre Appication Object, tels que http://www.developerphil.com/dont-store-data-in-the-application-object/ – Muhammad
Un tas d'options que je soupçonnais. Merci! Pour ce projet particulier j'ai choisi d'aller avec l'option numéro 3. Ce n'est pas joli mais ça fait le boulot! – aspartame
Je suis un grand fan de Parcelables ... ils sont faciles à construire et à transmettre. –
Je les déteste. Ils sont un cauchemar d'entretien et très sujet aux erreurs. Le seul avantage de simplement passer votre objet comme Serializable est la meilleure performance. – Matthias