Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在地图上显示(“移动”标记的集合,性能_Android_Performance_Google Maps_Google Maps Markers_Google Maps Android Api 2 - Fatal编程技术网

Android 在地图上显示(“移动”标记的集合,性能

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 =

我正在从WebAPI获取飞机列表及其位置和信息。我每隔几秒钟就调用这个web api,并绘制地图标记(平面)以进行地图绘制

当我调用我的方法addPlanetOp()来添加/更新地图上的标记时,地图会在短时间内冻结。如果同时在地图中添加/更新标记,则会出现一些延迟。这种情况在Nexus5等设备中发生。地图上大约有200-300个标记

有什么方法可以改进我的代码,做一些完全不同的事情吗

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
中进行计算,应该没有问题