Comment faire pour utiliser plusieurs MapActivities/MapViews par application Android/processus
J'ai écrit un MapActivity
classe qui est capable d'afficher un ensemble de lieux, ainsi que des lieux. Au démarrage, l'application crée une instance de cette MapActivity
et affiche de multiples endroits. Si l'utilisateur clique sur un certain endroit, puis une nouvelle Activity
est lancé qui montre les détails de l'endroit sélectionné. Cette activité a un élément de menu qui permet à l'utilisateur d'afficher le lieu sur une carte - cela provoque qu'une nouvelle instance de la MapActivity
est créé, sauf que maintenant seulement ce lieu unique est affiché.
Le problème maintenant est que si l'utilisateur revient à la première MapActivity
(celui qui montre plusieurs endroits) les tuiles ne sera pas chargé plus + parfois OutOfMemoryErrors sont rencontrés.
Selon le Android Javadoc, il est seulement possible d'avoir un MapActivity
par processus. Cependant, je ne veux pas définir mon MapActivity
comme une instance unique/singleTask, puisque l'utilisateur doit toujours être en mesure de revenir à la première MapActivity qui montre plusieurs endroits.
J'ai vu que les Lieux de Google app (qui est venu avec Google Map 4.4) pour Android utilise plusieurs MapActivity
instances. Comment est-ce possible? Et comment puis-je atteindre dans mon application?
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas une vue de la carte par classe, c'est par processus.
Il est connu que vous risquez de rencontrer des problèmes lors de l'utilisation de plusieurs mapviews dans un processus. Généralement c'est le cas (une application qui s'exécute dans un processus d') si vous ne configurez pas quelque chose de spécifique.
Vous pourriez bien utiliser android:processus d'attribut dans votre manifeste pour l'affecter à votre acitivites:
Cette façon, vous avez les activités en cours d'exécution dans des processus distincts, qui fonctionne bien si vous n'utilisez pas tout partagé variables statiques à travers les activités.
Voir aussi la discussion sur le bug dans l'android bug tracker:
http://code.google.com/p/android/issues/detail?id=3756
Vous pouvez avoir plus d'un MapActivity par processus aussi longtemps que un seul est en cours d'exécution à la fois. Chaque MapActivity peut avoir qu'une MapView lui est assigné. Vous pouvez afficher différentes cartes en réutilisant le même MapView dans le même MapActivity. Vous pouvez réutiliser une MapView en déclarant comme une statique de la variable de classe, de l'enlever de l'idée qu'elle était actuellement ajoutées lorsque vous avez terminé l'affichage, en lui donnant de nouvelles coordonnées GPS et l'ajouter à la vue suivante. Lorsque vous avez terminé avec qui MapActivity le terminer et puis vous pouvez ouvrir une nouvelle MapActivity. Cela fonctionne, je le fais dans mon app.
Une autre solution simple: il suffit de remplacer méthode onDestroy de tous vos MapActivities pour empêcher la fermeture de ressources, par exemple:
Nous devrions appeler onStop ici pour éviter les RuntimeException levée. Oui, c'est un hack, mais il fonctionne.
Mise à jour:
La Google Maps API Android v2 a prise en charge des Fragments. Cela signifie que vous pouvez facilement afficher plusieurs cartes comme vous le feriez pour tout autre fragment.
Voir le la documentation et en savoir plus sur la nouvelle
MapFragment
classe.