由于许多叠加,Android地图性能很差?

时间:2010-04-17 19:49:33

标签: android performance map overlay

我的android应用程序中有一个地图,显示了许多标记(~20-50)。但是当我尝试滚动/缩放时,该应用程序表现非常差(在谷歌Android地图中我搜索了比萨饼的样本,并且还发现了大约20-50个结果,并且在缩放/滚动时我没有注意到任何特定的性能问题地图)。

这是我的(伪)代码:

onCreate() {
    ....
    drawable = this.getResources().getDrawable(R.drawable.marker1);
    itemizedOverlay = new MyItemizedOverlay(drawable,mapView);
    ...
    callWebServiceToRetrieveData();

    createMarkers();
}

createMarkers(){
    for(elem:bigList){
        GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000));
        OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData());
        itemizedOverlay.addOverlay(overlayItem);

        mapOverlays.add(itemizedOverlay);
}
mapView.invalidate();

}

MyItemizedOverlay.addOverlay看起来像这样:

public void addOverlay(OverlayItem overlay) {
    m_overlays.add(overlay);
    populate();
}

3 个答案:

答案 0 :(得分:8)

如果我理解这是如何正常工作的,那么在每次添加叠加后都不应该调用populate。一旦你全部添加它们就应该这样做。我认为发生的事情是您添加了第一个OverlayItem并致电populate(),然后将其添加到ItemizedOverlay.然后您将第二个OverlayItem添加到列表并调用{{ 1}}并将两个叠加层添加到populate(),从而在叠加层中生成三个项目。所以我认为你的想法超过了你认为的20-50。

答案 1 :(得分:6)

我现在已经完成了以下工作并且工作得很快(呃):

createMarkers(){
    for(elem:bigList){
        GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000));
        OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData());
        itemizedOverlay.addOverlay(overlayItem);

   }
   itemizedOverlay.populateNow();
   mapOverlays.add(itemizedOverlay); //outside of for loop

}

并在MyOverlay中:

public void addOverlay(OverlayItem overlay) {
    m_overlays.add(overlay);
}

public void populateNow(){
    populate();
}

现在更好/正确吗?或者可能的任何其他改进?

答案 2 :(得分:0)

昨晚我遇到了同样的问题,我的解决方案和你的一样。关于我如何调用填充方法,我感到很奇怪。

我和你有相同的代码,但我打电话给

speedyPopulate() { 
  populate(); 
}
MyOverlay类中的