0

J'essaie de créer un ItemizedOverylay dynamique (voir le code ci-dessous) sur Google Maps (Android 2.1) sur un Nexus One.Dynamic Overlays ralentissant Google Maps (Android 2.1) sur Nexus One

Dans mon Activity (qui étend MapActivity), je crée un thread de données qui reçoit des données du réseau. Un «gestionnaire» est utilisé pour communiquer les données du thread de réception à l'activité de cartographie. Ces données contiennent les emplacements (lat, lon) des marqueurs que je veux superposer sur ma carte. L'emplacement de chaque marqueur est dynamique (c'est-à-dire qu'il change chaque fois que je reçois de nouvelles données du réseau.) refreshItems(ArrayList<OverlayItem> newItems) méthode invoquée à l'intérieur du handleMessage() du gestionnaire. Il y a environ 11 marqueurs dans l'ArrayList qui est passé à refreshItems

Je peux voir les marqueurs superposés sur la carte. Cependant, j'ai deux problèmes:

  1. Les anciens marqueurs ne sont pas supprimés de la carte. Après un moment, je vois une traînée de marqueurs.

  2. La carte ne répond à aucune commande tactile. Je ne peux pas déplacer la carte ou effectuer un zoom avant ou arrière. Après un certain temps, je vois un système avertissant que mon application ne répond pas (wait/close?) Message.

Une idée de ce qui ne va pas ici?

Merci.

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { 

private ArrayList<OverlayItem> overlayItems; 

public CoTItemizedOverlay(Drawable defaultMarker) { 
    super(boundCenter(defaultMarker)); 
    overlayItems = new ArrayList<OverlayItem>(); 
    populate(); 
} 

public void addNewItem(GeoPoint location, String markerText, String snippet) { 
    overlayItems.add(new OverlayItem(location, markerText, snippet)); 
    populate(); 
} 

public void removeItem(int index) { 
    overlayItems.remove(index); 
    populate(); 
} 

public void refreshItems(ArrayList<OverlayItem> newItems) { 
    // remove all existing items 
    for (int i = 0; i < cotoverlayItems.size(); i++) { 
     overlayItems.remove(i); 
    } 

    // copy all the items 
    if (newItems != null && cotoverlayItems.size() == 0) { 
     overlayItems.addAll(newItems); 
    } 

    populate(); 
} 

@Override 
protected OverlayItem createItem(int index) { 
    return overlayItems.get(index); 
} 

@Override 
public int size() { 
    return overlayItems.size(); 
} 

}

+0

faire aussi que je dois faire le fil de la méthode de rafraîchissement en toute sécurité? –

Répondre

0

Vous appelez remplir partout. Lire ce fil: Android Map Performance poor because of many Overlays?

Ce serait aussi pourquoi les vieux marqueurs ne disparaissent pas.

+0

Casey, Merci pour votre réponse. Maintenant, j'appelle populate uniquement dans la méthode refresh. Un autre changement que j'ai fait était d'effacer la liste des superpositions que je reçois de Mapview avant d'y ajouter le nouveau ItemizedOverlay. C'était tuer en train de tuer ma performance :(. –

0

Essayez ceci:

- Effacer tous les anciens marqueurs avant et obtenir afficher de nouveaux marqueurs

YourMapOverlay mapOverLay = mapView.getOverlays(); 
mapOverlay.clear(); 
Questions connexes