Google Maps Android API v2 SoporteMapFragmento de pérdida de memoria

Usando 2 actividades simples. Primera Actividad que solo contiene un botón para iniciar la 2ª Actividad que contiene el mapa:

Actividad principal:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void goToMap(View view){ //This is just the onClick method for the button Intent intent=new Intent( this, BigMapTest.class); startActivity(intent); } 

La actividad del mapa:

 public class BigMapTest extends FragmentActivity { SupportMapFragment mapFragment; GoogleMap map; @Override protected void onCreate(Bundle arg0) { // TODO Auto-generated method stub super.onCreate(arg0); setContentView(R.layout.travel_diary_big_map); mapFragment=(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.big_map); map=mapFragment.getMap(); } 

El diseño XML para la actividad del mapa:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment android:id="@+id/big_map" android:layout_width="fill_parent" android:layout_height="fill_parent" class="com.google.android.gms.maps.SupportMapFragment" /> 

Ahora cuando ejecuto este código, presionando el botón para pasar a la Actividad con el mapa, y presionando de nuevo para llegar a la primera actividad … luego repitiendo el proceso, puedo ver el montón aumentando de tamaño cada vez, hasta que alcanza Es límites y luego comienza a sujetarse. Si te desordenes un poco más con el mapa (es decir, el zoom) puedo obtener una excepción OOM en este momento.

01-25 16: 10: 13.931: D / dalvikvm (21578): GC_FOR_ALLOC liberado 1898K, 7% libre 45859K / 49187K, pausado 204ms
01-25 16: 10: 14.671: I / dalvikvm-heap (21578): Sujete el montón de GC objetivo de 52.724MB a 48.000MB
01-25 16: 10: 14.671: D / dalvikvm (21578): GC_CONCURRENT liberado 2534K, 6% libre 46554K / 49187K, pausado 3ms + 14ms
01-25 16: 10: 15.372: I / dalvikvm-heap (21578): Sujete el montón de GC objetivo de 52.979MB a 48.000MB
01-25 16: 10: 15.382: D / dalvikvm (21578): GC_CONCURRENT liberado 2273K, 5% libre 46815K / 49187K, pausado 3ms + 15ms
01-25 16: 10: 15.622: I / dalvikvm-heap (21578): Sujete el montón de GC objetivo de 52.604MB a 48.000MB
01-25 16: 10: 15.622: D / dalvikvm (21578): GC_FOR_ALLOC liberado 657K, 6% libre 46431K / 49187K, pausado 202ms
01-25 16: 10: 16.203: I / dalvikvm-heap (21578): Sujete el montón de GC objetivo de 52.959MB a 48.000MB
01-25 16: 10: 16.203: D / dalvikvm (21578): GC_FOR_ALLOC liberado 1469K, 5% libre 46796K / 49187K, pausado 217ms
01-25 16: 10: 16.203: I / dalvikvm-heap (21578): Forzar la colección de SoftReferences para la asignación 278744-byte
01-25 16: 10: 16.423: I / dalvikvm-heap (21578): Sujete el montón de GC objetivo de 52.952MB a 48.000MB
01-25 16: 10: 16.423: D / dalvikvm (21578): GC_BEFORE_OOM liberado 9K, 5% libre 46786K / 49187K, pausado 219ms
01-25 16: 10: 16.423: E / dalvikvm-heap (21578): Fuera de memoria en una asignación 278744-byte.

Cualquier sugerencia / ayuda sería apreciada.

Cerca de lo que puedo decir de algunas matanzas básicas MAT, lo que está viendo es una caché mantenida por Maps V2 de los datos de mapas descargados. El caché parece ser más grande si usted panorámica y zoom mucho. La caché se encoge si abandona el mapa y vuelve a un mapa nuevo más adelante. No pude obtener N cachés de N veces el lanzamiento de la actividad de mapa de su aplicación de ejemplo, y el tamaño de la caché se redujo y fluyó dependiendo de lo que hizo el usuario.

Por desgracia, esta caché es inconfigurable, AFAIK, en términos de lo grande que es, cuando se despeja, se derrame sobre el disco, etc

Por lo tanto, por defecto, todo lo que puedes hacer es dejar a un lado un trozo sano de tu espacio en montón para que Maps V2 juegue, y tomar medidas para permanecer dentro de este subconjunto más pequeño de heap.

Si desea experimentar, puede intentar llamar a clear() en GoogleMap o onLowMemory() en su SupportMapFragment , para ver si alguna ayuda reduce este tamaño de caché.

Tengo exactamente el mismo problema. La memoria se incrementa cada vez que se inicia la actividad que aloja el mapa V2. Y no se libera incluso cuando la actividad termina.

Así que la solución es reutilizar esa actividad. Haga que la actividad singleTask en manifiesto y en lugar de finish() , use moveTaskToBack(true);

Desarrolladores Android 5:10 PM – Página de Google+

Estamos lanzando Google Play Services v3.0, que introduce las mejoras en la API de Google+ de inicio de sesión y Google Maps para Android.

A partir del 26 de febrero de 2013, este problema, que también se describe en la página de gmaps-api-issues, ha sido corregido por la actualización actual de la API de Google .

Utilícelo en su diseño:

 <LinearLayout android:id="@+id/map_container2" android:layout_width="match_parent" android:layout_height="200dp" android:layout_weight="35.22" android:orientation="horizontal" > <fragment android:id="@+id/map1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" class="com.google.android.gms.maps.SupportMapFragment" map:cameraTargetLat="40.72" map:cameraTargetLng="-74.00" map:cameraZoom="8" /> </LinearLayout> 

Y este código:

 onCreate{ setUpMapIfNeeded(); } private void setUpMapIfNeeded() { // TODO Auto-generated method stub // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map1)) .getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { setUpMap(); } } } private void setUpMap() { // TODO Auto-generated method stub // Hide the zoom controls as the button panel will cover it. mUiSettings = mMap.getUiSettings(); // Enables/disables zoom gestures (ie, double tap, pinch & stretch). mMap.getUiSettings().setZoomGesturesEnabled(false); // Enables/disables scroll gestures (ie panning the map). mMap.getUiSettings().setScrollGesturesEnabled(false); // Enables/disables the compass (icon in the top left that indicates the orientation of the // map). mMap.getUiSettings().setCompassEnabled(false); // Add lots of markers to the map. addMarkersToMap(); // Pan to see all markers in view. // Cannot zoom to bounds until the map has a size. final View mapView = getSupportFragmentManager().findFragmentById(R.id.map1).getView(); if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressLint("NewApi") // We check which build version we are using. @Override public void onGlobalLayout() { LatLngBounds bounds = new LatLngBounds.Builder() .include(WOODS) .build(); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } else { mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50)); } }); } } private void addMarkersToMap() { // TODO Auto-generated method stub // Uses a colored icon. mWoods = mMap.addMarker(new MarkerOptions() .position(WOODS) .title("Woods") .snippet("R. Quatá, 1016, Vila Olimpia - (11) 3849-6868") .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); } 
  • No se puede ver los detalles de StrictMode en logcat - Se ha suprimido la violación de la política de StrictMode en la rotación de la pantalla
  • SupportMapFragment y onMapReady
  • ClassNotFoundException leyendo un objeto Serializable en una clase que extiende MapFragment en onSaveInstanceState
  • El método getSupportFragmentManager () no está definido para el tipo MapFragment
  • SupportMapFragment.getmap () devuelve null
  • SupportMapFragment carga extremadamente lento la primera vez, pero rápidamente en las cargas siguientes (incluyendo diferentes actividades)
  • Android GoogleMap v2 se recorta o no se muestra completamente
  • Cambiar de fragmento con fragmento de mapa deja una pantalla negra
  • SupportMapFragment en DialogFragment
  • Android google maps nullpointerexception
  • Android Maps V2 pérdida de memoria LocationClientHelper
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.