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:
- Estado de error: active SupportMapFragment {} ha borrado el índice: -1
- Mostrar MapFragment en un DialogFragment
- Android MapFragment Runtime Error - No se pudo encontrar la clase 'maps.jk'
- Google Maps Android API v2 detecta un clic largo en el mapa y agrega marcador que no funciona
- Cómo utilizar SupportMapFragment dentro de un fragmento?
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.
- No se puede cambiar el identificador de contenedor del fragmento SupportMapFragment
- Google map dentro de otro fragmento - Error al llamar a getMapAsync
- Error al abrir SupportMapFragment por segunda vez
- Android no puede encontrar el método de símbolo getMap ()
- Cambiar fragmentos - Google Map Fragmento V2 - La actividad ha sido destruida Error
- MapFragment.getMap () devuelve null
- GetMapAsync () en el fragmento
- NullPointerException en mapFragment.getMapAsync
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))); }
- Firebase Android onAuthStateChanged () dispara dos veces después de signInWithEmailAndPassword ()
- Indicador de página de círculo: cómo cambiar el cambio de color de relleno