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

Dav*_*ave 5 performance android overlay map

我的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();
Run Code Online (Sandbox Code Playgroud)

}

MyItemizedOverlay.addOverlay看起来像这样:

public void addOverlay(OverlayItem overlay) {
    m_overlays.add(overlay);
    populate();
}
Run Code Online (Sandbox Code Playgroud)

Cas*_*eyB 8

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


Dav*_*ave 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
Run Code Online (Sandbox Code Playgroud)

}

在MyOverlay中:

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

public void populateNow(){
    populate();
}
Run Code Online (Sandbox Code Playgroud)

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