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:
The old markers are not removed from the map. After a while I see a trail of markers.
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