Le partage de données entre les activités et les services
Je suis en train de travailler sur un petit projet android où il est nécessaire de partager certaines données parmi plusieurs activités et un service qui s'exécute dans un processus séparé. Je voudrais juste savoir quelles sont mes options en termes de partage de données? La classe d'Application? L'IPC? Basé sur un fichier? Les émissions?
Merci les gars!
Vous devez vous connecter pour publier un commentaire.
1 . Sonne comme vous avez besoin de diffuser de l'information. Vous que sera en mesure de définir des récepteurs de radiodiffusion dans toute activité/service que vous souhaitez être averti.
Pour en savoir plus à propos de Broadcastreceiver et sur diffusion de
2 .
Comment puis-je transférer des données entre les Activités/Services au sein d'une seule demande?
Cela dépend du type de données que vous voulez partager:
Types De Données Primitifs
Pour partager des données primitives entre les Activités/Services dans une application, l'utilisation de l'Intention.putExtras(). Pour la transmission de données primitifs qui doit persister utiliser le Préférences mécanisme de stockage.
Non-Objets Persistants
Pour le partage de complexes non-persistant objets définis par l'utilisateur pour une courte durée, les approches suivantes sont recommandées:
Le android.app.La classe d'Application
Le android.app.L'Application est une classe de base pour ceux qui en ont besoin pour maintenir globale de l'état de l'application. Il peut être consulté via getApplication() de toute Activité ou Service. Il a un couple de méthodes de cycle de vie et sera instancié par Android automatiquement si votre registre AndroidManifest.xml.
Un public static field/méthode
Une autre façon de rendre les données accessibles à travers les Activités/Services est d'utiliser les champs statiques et/ou des méthodes. Vous pouvez accéder à ces champs statiques de toute autre classe dans votre application. Pour partager un objet, l'activité qui crée votre objet définit un champ statique au point de cet objet et de toute autre activité qui veut utiliser cet objet seulement accède à ce champ statique.
Une table de hachage de WeakReferences à des Objets
Vous pouvez également utiliser une table de hachage de WeakReferences à des Objets avec de Longues touches. Lorsqu'une activité en veut passer un objet à une autre activité, il met tout simplement l'objet dans la carte et envoie de la clé (qui est une Longue unique basé sur un comptoir ou une heure) à l'activité des bénéficiaires, via intention extras. Le bénéficiaire de l'activité récupère l'objet à l'aide de cette touche.
Une classe Singleton
Il y a des avantages à l'aide d'un static Singleton, comme vous pouvez vous référer à eux sans casting getApplication() d'une classe d'application spécifique, ou la peine de pendaison d'une interface sur toutes les sous-classes afin que vos différents modules peuvent consulter cette interface à la place.
Mais, le cycle de vie d'un statique n'est pas bien sous votre contrôle; afin de respecter le modèle du cycle de vie, la classe d'application devraient lancer et le démontage de ces objets statiques dans le onCreate() et onTerminate() les méthodes de la Classe Application
Objets Persistants
Même si une application s'affiche à continuer de s'exécuter, le système peut choisir de tuer ses processus et de le redémarrer plus tard. Si vous avez des données que vous avez besoin de persister d'une activité invocation à l'autre, vous avez besoin de représenter des données de l'état qui est sauvé par une activité lorsqu'il est informé qu'il peut aller loin.
Pour le partage complexe persistante objets définis par l'utilisateur, les approches suivantes sont recommandées:
Si les données partagées doit être conservé à travers les points où le processus de demande peut être tué, puis de placer les données dans le stockage persistant comme les Préférences de l'Application, SQLite DB, des Fichiers ou des ContentProviders. Veuillez vous référer à la Le Stockage De Données pour plus de détails sur la façon d'utiliser ces composants.