在Google Maps API v2中管理標記的正確方法是什麼?我試圖用僅在該區域內可見的標記來更新視口,並且我使用OnCameraChangeListener
來知道何時使用最新標記更新視口。但是,看起來地圖在繪製或更新標記時不可滾動/可縮放。我注意到,當使用setIcon()
時,延遲更加糟糕。在Google Maps v1中,當我使用ItemizedOverlays時,我從未遇到過這個麻煩。在這裏我的代碼時遇到滯後滾動/縮放要點:android谷歌地圖v2標記正在繪製/更新時滯後
private void updatePinsOnMap(MapDisplayData mapDisplayData) {
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getPinWithBadgeCount(2));
List<LatLng> latlngs = Lists.newArrayList();
for (NearbyPlaceEdge place : mapDisplayData.getPlaces()) {
latlngs.add(place.latlng);
}
for (NearbyPlaceCluster cluster : mapDisplayData.getClusters()) {
latlngs.add(cluster.latlng);
}
int numMarkersToPlot = latlngs.size();
for (int i = 0; i < numMarkersToPlot; i++) {
if (i < mMarkers.size()) {
// recycle
mMarkers.get(i).setPosition(latlngs.get(i));
} else {
final Marker m = mGoogleMap.addMarker(
new MarkerOptions()
.position(latlngs.get(i))
.icon(bitmapDescriptor)
);
mMarkers.add(m);
}
}
for (int i = mMarkers.size() - 1; i >= numMarkersToPlot; i--) {
mMarkers.remove(i).remove();
}
}
UPDATE:
我創建了一個示例應用程序與上面的代碼和工作的事情按照計劃(即沒有11:43) 。我花了一些時間思考這個問題,我認爲這與Google Maps v2所需的內存有關。通過觀察logcat的,我每次移動地圖 - 這觸發地圖更新 - 我得到了很多GC的消息是這樣對我的Nexus 4
05-27 14:28:23.701: D/dalvikvm(2849): GC_FOR_ALLOC freed 1198K, 23% free 26889K/34504K, paused 112ms, total 112ms
這是API中的一個潛在的內存泄漏?我現有的應用程序已經佔用了一些內存,但我認爲GMaps將能夠根據可用內容適當管理自己的內存。
感謝洞察Maciej。不過,我並沒有真正添加/刪除/更新大量的引腳。在任何給定的onCameraChangeListener回調函數中大約有25個標記。我用更多的信息更新我的問題 –
@VietNguyen更新了答案 –