Android 在地图上显示(“移动”标记的集合,性能
我正在从WebAPI获取飞机列表及其位置和信息。我每隔几秒钟就调用这个web api,并绘制地图标记(平面)以进行地图绘制 当我调用我的方法addPlanetOp()来添加/更新地图上的标记时,地图会在短时间内冻结。如果同时在地图中添加/更新标记,则会出现一些延迟。这种情况在Nexus5等设备中发生。地图上大约有200-300个标记 有什么方法可以改进我的代码,做一些完全不同的事情吗Android 在地图上显示(“移动”标记的集合,性能,android,performance,google-maps,google-maps-markers,google-maps-android-api-2,Android,Performance,Google Maps,Google Maps Markers,Google Maps Android Api 2,我正在从WebAPI获取飞机列表及其位置和信息。我每隔几秒钟就调用这个web api,并绘制地图标记(平面)以进行地图绘制 当我调用我的方法addPlanetOp()来添加/更新地图上的标记时,地图会在短时间内冻结。如果同时在地图中添加/更新标记,则会出现一些延迟。这种情况在Nexus5等设备中发生。地图上大约有200-300个标记 有什么方法可以改进我的代码,做一些完全不同的事情吗 HashMap<String, MarkerContainer> mMarkerHashMap =
HashMap<String, MarkerContainer> mMarkerHashMap = new HashMap <String, MarkerContainer>();
public void addPlanesToMap(List <? extends RealtimePlane > planes) {
View planeMarkerView = getActivity().getLayoutInflater().inflate(R.layout.map_marker_plane, null);
TextView markerShortCodeText = (TextView) planeMarkerView.findViewById(R.id.MapMarkerText);
ImageView markerArrow = (ImageView) planeMarkerView.findViewById(R.id.MapMarkerArrow);
for (RealtimePlane plane: planes) {
MarkerContainer markerContainer = mMarkerHashMap.get(plane.getPlaneId());
// Do not process, if not updated
if (markerContainer != null && markerContainer.getPlane().getRecordedAtTime().equals(plane.getRecordedAtTime())) {
continue;
}
markerShortCodeText.setText(plane.getPlaneCode());
markerShortCodeText.setBackgroundResource(getMapMarkerDrawableBg(plane.getType()));
markerArrow.setRotation((float) plane.getBearing());
markerArrow.setVisibility(View.VISIBLE);
// Add new plane marker to map
if (markerContainer == null) {
Marker m = mMap.addMarker(new MarkerOptions()
.position(plane.getLocation())
.flat(true)
.anchor(0.5f, 0.5f)
.title(plane.getLineCode())
.icon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(getActivity(), planeMarkerView))));
mMarkerHashMap.put(plane.getPlaneId(), new MarkerContainer(m, plane));
}
// Marker already set, update
else {
markerContainer.getMarker().setIcon(BitmapDescriptorFactory.fromBitmap(loadBitmapFromView(getActivity(), planeMarkerView)));
markerContainer.getMarker().setPosition(plane.getLocation());
markerContainer.setPlane(plane);
}
}
}
HashMap-mMarkerHashMap=newhashmap();
公共无效添加平面图(列表
有什么方法可以改进我的代码,做一些完全不同的事情吗
是的,不要绘制每个标记,只绘制可见区域中的标记。您还可以进行标记聚类
每隔几秒钟绘制2-300个标记并不是一个好主意。在这种情况下,聚类是不可能的,但只绘制那些可见的标记当然是可能的。我只是想知道这是否会增加很多开销来计算标记是否可见,或者删除那些不可见的标记如果您在AsyncTask
中进行计算,应该没有问题