6
votes

Comment partager des données entre deux processus

J'utilise différents processus (utilisant Android: Processus dans mon manifeste) Pour pouvoir utiliser plus d'un MapView dans mon application ( Comment utiliser plusieurs Mapactivités / MapVishs par application Android / processus ). Les 2 cartes sont dans différentes activités et différents onglets de mon tabhost général.

Non, je veux zoomer sur un emplacement spécifique, qui est sélectionné à travers l'utilisateur dans une autre activité. L'utilisation de variables statiques n'a pas fonctionné. Après cela, j'ai essayé de sauvegarder les données dans un fichier SharedPreferences et de le lire à nouveau sur la mapactivité. Mais cela ne fonctionne pas non plus. Les données sont écrites avec succès, mais la mapactivité ne trouve aucune donnée dans les préférences partagées.

est une possibilité de partager des données entre deux processus ou plus?

Sauvegarde des données de localisation: < / p> xxx

lecture de la lecture de la lecture: xxx


0 commentaires

3 Réponses :


1
votes

Je pense Android Interface Définition Language (AIDL) peut être votre réponse ici . Je l'ai utilisé pour communiquer entre une application et un service distant à partir d'un APK séparé. Marshalling Les données ne doivent pas être compliquées si vous passez simplement quelques flotteurs.


1 commentaires

Merci pour votre réponse. Je l'ai regardé, mais je n'ai pas eu de travailler avec deux activités. Aussi, je pense que c'est une surcharge de bits litille à mes fins



0
votes

J'ai essayé la réponse de Jpriest et Nickt, mais ils n'ont pas fonctionné ni trop surcharger. J'ai fini par sauver les données dans un fichier et la lire à nouveau dans l'autre processus. Pas une très belle solution mais au moins cela a fonctionné.


0 commentaires

5
votes

Une méthode simple est les préférences partagées. Utilisez le drapeau "context.mode_multi_process" pour obtenir vos préférences partagées.

dans le processus de l'écrivain: xxx

dans le processus de lecture: xxx

Remarque: Dans le processus de lecteur, vous devez récupérer une variante fraîche SharedPreferences à chaque fois pour que la valeur partagée soit rafraîchie.

Autres méthodes: 1. Envoyez la diffusion avec des données supplémentaires; 2. Le fournisseur de contenu.


3 commentaires

Une note importante: assurez-vous d'utiliser .Commit () et non .Apply () lorsque vous écrivez à des préfs pour vous assurer que les données sont écrites avant de la lire de un autre processus. De la DOCS: "Contrairement à COMMITE () , qui écrit ses préférences sur le stockage persistant de manière synchrone, appliquer () commente ses modifications apportées à la mémoire SharedPreferences < / Code> Immédiatement mais commence une commission asynchrone envers le disque et vous ne serez pas averti de tout défaillance .... SharedPreferences Les instances sont des singletons dans un processus [emphase ajouté] . "


Context.mode_multi_process est considéré comme obsolète selon les documents, car cela ne se comporte pas de manière cohérente dans tous les cas.


SharedPreferences ne prend pas en charge les multi-processus. State Documents officiels: Remarque: cette classe ne prend pas en charge l'utilisation sur plusieurs processus.