2010-07-24 7 views
5

Tengo una aplicación de mapa desplazable que por ahora tiene un gran mapa de bits. Se carga bien en el inicio, pero cuando pierde el estado de primer plano y el usuario lo trae de nuevo, obtengo un error de falta de memoria. En onPause, destruye el mapa de bits mediante el reciclaje y lo marca como nulo. El onResume comprueba si map == null y volverá a cargar el mapa de bits, lo que está bloqueando el programa a pesar de que reciclo el mapa de bits ... Aquí hay algunos bits de código. Todas las demás referencias al mapa de mapa de bits primero comprueban si es nulo antes de cargar/dibujar.error de memoria relacionada con grandes mapas de bits y el ciclo de vida de actividad de Android

onPause

protected void onPause() { 
super.onPause(); 
Log.e("sys","onPause was called"); 
if (map != null) 
{ 
     map.recycle(); 
     map = null; 
     System.gc(); 
     Log.e("sys","trashed the map"); 
} 
} 

mi onResume

protected void onResume(){ 
super.onResume(); 
Log.e("sys","onResume was called"); 

if (map == null) 
     map = BitmapFactory.decodeResource(getResources(), 
         R.drawable.lowresbusmap); 
Log.e("sys","redrew the map"); 
} 
+0

¿Está recibiendo este error en el depurador, o en un teléfono real ? – EboMike

+0

en un teléfono real (motorola droide) – jfisk

Respuesta

0

Trate de esta manera:

protected void onResume(){ 
    super.onResume(); 
    if (map == null){ 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inTempStorage = new byte[16*1024]; 

     map = BitmapFactory.decodeResource(getResources(), 
         R.drawable.lowresbusmap, options); 
    } 
} 
+0

sin suerte, esta imagen está hecha para teléfonos más rápidos. Los más lentos como el G1 usarán un mapa de bits más pequeño. En ese caso, ¿cambiaría 16 * 1024 a 24 * 1024? Desafortunadamente ese código todavía me está dando el mismo error. – jfisk

Cuestiones relacionadas