【问题标题】:Dynamic Overlays slowing down Google Maps (Android 2.1) on Nexus OneNexus One 上的动态叠加层会降低 Google 地图(Android 2.1)的速度
【发布时间】:2011-02-16 16:24:06
【问题描述】:

我正在尝试在 Nexus One 上的 Google 地图 (Android 2.1) 上创建动态 ItemizedOverylay(请参阅下面的代码)。

在我的Activity(扩展 MapActivity)中,我正在创建一个从网络接收数据的数据线程。 “处理程序”用于将数据从接收线程传递到映射活动。此数据包含我要在地图上叠加的标记的位置(纬度、经度)。每个标记的位置是动态的(即,每次我从网络接收到新数据时它都会改变。)refreshItems(ArrayList<OverlayItem> newItems) 方法在处理程序的handleMessage() 内部调用。 ArrayList 中有大约 11 个标记被传递给refreshItems

我可以看到地图上覆盖的标记。但是,我有两个问题:

  1. 旧标记不会从地图中删除。过了一会儿,我看到了一串标记。

  2. 地图不响应任何触摸命令。我无法移动地图或放大或缩小。过了一会儿,我看到一条系统警告,提示我的应用程序没有响应(等待/关闭?)消息。

知道这里有什么问题吗?

谢谢。

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

}

【问题讨论】:

  • 我还需要使刷新方法线程安全吗?

标签: android google-maps-markers google-maps itemizedoverlay


【解决方案1】:

您正在到处调用填充。阅读此线程: Android Map Performance poor because of many Overlays?

这也是旧标记不会消失的原因。

【讨论】:

  • 凯西,感谢您的回复。现在我只在刷新方法中调用填充。我所做的另一个更改是在添加新的 ItemizedOverlay 之前清除从 Mapview 获得的覆盖列表。这正在扼杀我的表现:(。
【解决方案2】:

试试这个:

-- 在获取和显示新标记之前清除所有旧标记

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多