在 Android 应用程序中加载 Google 地图太慢

问题描述 投票:0回答:3

在我的 Android 应用程序中,我有一个带有按钮的片段。单击按钮后,我将加载另一个带有 MapView 的片段。一切都很好,但问题是,一旦单击前一个 Fragment 的按钮,带有 Google Maps 的 Fragment 至少需要 0.5 秒才能启动。您知道另一种加载谷歌地图而不卡住片段事务的方法吗?

这是加载 Google 地图的片段

public class DetalleRuta extends android.support.v4.app.Fragment {

private GoogleMap googleMap;
private MapView mapView;

public DetalleRuta() {
    // Required empty public constructor
}

@Override
public void onResume() {
    mapView.onResume();
    super.onResume();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mapView.onLowMemory();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_detalle_ruta, container, false);

    //Inicio el mapa
    mapView = (MapView)v.findViewById(R.id.mapa);
    mapView.onCreate(savedInstanceState);

    googleMap = mapView.getMap();
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);


    return v;
}

}

也许我的智能手机不够好,它是BQ aquaris E4。

android google-maps maps fragment
3个回答
5
投票

您正在同步加载地图,请尝试异步执行,Google 地图有一个您可以使用的 Map Ready 回调。

import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import android.app.Activity;
import android.os.Bundle;

public class MapPane extends Activity implements OnMapReadyCallback {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_activity);

    MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap map) {
    LatLng sydney = new LatLng(-33.867, 151.206);

    map.setMyLocationEnabled(true);
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

}
}

5
投票

添加生命周期方法并调用mapView的生命周期方法对我有用!

@Override
protected void onResume() {
    mMapView.onResume();
    super.onResume();
}

@Override
protected void onPause() {
    mMapView.onPause();
    super.onPause();
}

@Override
protected void onDestroy() {
    mMapView.onDestroy();
    super.onDestroy();
}

@Override
public void onLowMemory() {
    mMapView.onLowMemory();
    super.onLowMemory();
}

0
投票

已经遇到这个问题,请在 Manifest file 内的活动标记中将 hardwareAccelerated 设置为 true这是链接

© www.soinside.com 2019 - 2024. All rights reserved.