在地图上添加标记会使地图滞后

Adding markers onto the map makes the map lag

概述:应用程序在 Fragment 中有一张地图,Fragment 从房间数据库中检索标记的数据,然后将标记绘制到地图上。

问题:每当将标记绘制到地图上时,地图片段就会变得不稳定,并且在某些点对点击没有反应,一旦移除标记,地图的延迟就会得到修复。我不知道为什么标记使它变得不稳定,我怀疑这个问题与从数据库加载标记有关,但这只是一个假设。

获取标记并将其绘制到地图上的方法。

private void drawMarker(){
        if (markersAreDrawn == false){
        markerViewModel.getAllMarkers().observe(MapFragment.this, new Observer<List<MarkerObject>>() {
            @Override
            public void onChanged(List<MarkerObject> markerObjects) {
                for (MarkerObject markerObject : markerObjects) {
                    if (checkedItems[0] == true && markerObject.getCategory().equals("Nature")) {
                        mMap.addMarker(new MarkerOptions()
                                .position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
                                .snippet(markerObject.getDescription())
                                .title(markerObject.getTitle()));


                    }
                    if (checkedItems[1] == true && markerObject.getCategory().equals("Abandoned")){
                        mMap.addMarker(new MarkerOptions()
                                .position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
                                .snippet(markerObject.getDescription())
                                .title(markerObject.getTitle()));


                    }
                    if (checkedItems[2] == true && markerObject.getCategory().equals("Camping")){
                        mMap.addMarker(new MarkerOptions()
                                .position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
                                .snippet(markerObject.getDescription())
                                .title(markerObject.getTitle()));


                    }
                    if (checkedItems[3] == true && markerObject.getCategory().equals("Sightseeing")){
                        mMap.addMarker(new MarkerOptions()
                                    .position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
                                    .snippet(markerObject.getDescription())
                                    .title(markerObject.getTitle()));
                    }
                }
            }
        });
        } markersAreDrawn = true;
    }

然后在OnViewCreated()中调用的OnMapReadyCallback中执行drawMarker()方法。

我之前已经研究过这个问题几次,但我自己还没有弄明白。 非常感谢任何帮助。

确实地图滞后,上面有大量标记,但应该有数千个标记。可能是因为您多次将标记添加到同一位置。在绘制标记之前尝试清理地图。类似的东西:

...
@Override
public void onChanged(List<MarkerObject> markerObjects) {
    <YOUR_GOOGLE_MAP_OBJECT_NAME>.clear();
    for (MarkerObject markerObject : markerObjects) {
...

或者最好像 this answer of Hesam 那样将标记保存到列表中并对其进行管理(仅添加新标记等)。