Dynamic Overlays slowing down Google Maps (Android 2.1) on Nexus One

Posted by Soumya Simanta on Stack Overflow See other posts from Stack Overflow or by Soumya Simanta
Published on 2010-05-07T03:51:42Z Indexed on 2010/05/07 3:58 UTC
Read the original article Hit count: 488

Hi,

I'm trying to create a dynamic ItemizedOverylay (please see the code below) on Google Maps (Android 2.1) on a Nexus One.

In my Activity (that extends MapActivity) I'm creating a data thread that is receiving data from the network. A 'handler' is used to communicate the data from the receiving thread to map activity. This data contains the locations (lat, lon) of the markers that I want to overlay on my map. The location of each marker is dynamic (i.e., it changes every time I receive new data from the network.) refreshItems(ArrayList<OverlayItem> newItems) method in invoked inside the handleMessage() of the handler. There are around 11 markers in the ArrayList that is passed to refreshItems

I can see the markers overlayed on the map. However, I've two issues:

  1. The old markers are not removed from the map. After a while I see a trail of markers.

  2. The map doesn't respond to any touch commands. I cannot move the map or zoom in or zoom out. After a while I see a system warning that my app is not responding message.

Any idea what's wrong here ?

Thanks.

public class MyItemizedOverlay extends ItemizedOverlay {

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 times
    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();
}

}

© Stack Overflow or respective owner

Related posts about googlemaps

Related posts about android