Android Google Maps API V2每次重新加载时都会变慢

时间:2014-03-24 15:35:31

标签: android performance google-maps android-fragments google-maps-android-api-2

我的应用中有一个片段,里面有一个MapFragment。 当我加载这个片段时,我开始从服务器读取2000个标记数据,在阅读它们之后,我将遍历每个标记并将其添加到Map。 首先,地图需要4秒才能显示这2000个标记。但每次再次加载地图后(如更改方向或更改抽屉菜单项并再次返回地图),加载标记的次数越来越多。例如,在更改方向8次后,地图需要40秒才能加载相同的2000个标记!

这是我如何初始化地图:

        googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
        CameraPosition cameraPosition = new CameraPosition.Builder().target( new LatLng(50.941303, 6.958166)).zoom(10).build();
        googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getActivity().getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }

在这里我将标记添加到地图中:

    for (int i = 0; i<mapVehicles.size(); i++)
    {
        // latitude and longitude
        double latitude = mapVehicles.get(i).latitude;
        double longitude = mapVehicles.get(i).longitude;

        // create marker
        MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude))
                .title(mapVehicles.get(i).lineTripIdentification).snippet(destinationShort + ": " + mapVehicles.get(i).destination);

        // Changing marker icon
        marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.vehicleannotation));

        // adding marker            
        vehicleMarkers.put(googleMap.addMarker(marker), mapVehicles.get(i));


    }

我还在具有MapFragment的片段的onCreateView中使用了以下内容:

this.setRetainInstance(true);

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:2)

不是一次又一次地删除和添加所有标记,而是应该通过setPosition(LatLng latlng)更改每个标记的位置。

答案 1 :(得分:0)

仅在未加载之前加载标记:

public void onCreate(Bundle savedInstanceState) {

    ...

    if (savedInstanceState != null) {
        // do nothing 
    } else {
        // add markers
    }

}