Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 23/07/13, 01:32:45
Array

[xs_avatar]
manolazo manolazo no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Out of memory on xxxxxx Byte Allocation

Buenas.

Estoy probando una aplicacion en la cual realizo un TransitionDrawable dentro de un Timer.

Código:
public void onClick(View v) {	
		.
		. 		
		.
	timer = new Timer();					
	timer.schedule(new TimerTask(){
		@Override
		  public void run() { 
			bm1 = BitmapFactory.decodeResource(contexto.getResources(), R.drawable.foto);
			bm2 = BitmapFactory.decodeResource(contexto.getResources(), imagenes[parlinear.get(0).getId()]);

			drawables =  new BitmapDrawable[2];								
			drawables[0] = new BitmapDrawable(contexto.getResources(), bm1);
			drawables[1] = new BitmapDrawable(contexto.getResources(), bm2);

			trans = new TransitionDrawable(drawables);	
			trans2 = new TransitionDrawable(drawables2);
			
			handler.post(new runa());
	 }						
      }, 4000);
fuera del hilo ponemos la transicion en un imageview (im1)

Código:
final Handler handler = new Handler();
		
	class runa implements Runnable{			
			@Override
			public void run() {				
												
				im1.setImageDrawable(trans);
				trans.startTransition(2000);	
			 }
			}
Pues bien, las primeras pulsaciones sobre el imageView no pasa nada, pero sobre la sexta pulsacion se me arroja el siguiente error:
Se ve que esta relacionado con la linea BitmapFactory.decodeResource() pero por mas que modifico no consigo dar con ello.
Alguna idea de por donde van los tiros?



07-22 22:36:51.085: E/dalvikvm-heap(26085): Out of memory on a 2183696-byte allocation.
07-22 22:36:51.085: I/dalvikvm(26085): "Timer-5" prio=5 tid=16 RUNNABLE
07-22 22:36:51.085: I/dalvikvm(26085): | group="main" sCount=0 dsCount=0 obj=0x4254be18 self=0x5d112a70
07-22 22:36:51.085: I/dalvikvm(26085): | sysTid=28587 nice=0 sched=0/0 cgrp=apps handle=1515006088
07-22 22:36:51.085: I/dalvikvm(26085): | schedstat=( 51788168 1015247 20 ) utm=5 stm=0 core=3
07-22 22:36:51.085: I/dalvikvm(26085): at android.graphics.BitmapFactory.nativeDecodeAsset(N ative Method)
07-22 22:36:51.090: I/dalvikvm(26085): at android.graphics.BitmapFactory.decodeStream(Bitmap Factory.java:623)
07-22 22:36:51.090: I/dalvikvm(26085): at android.graphics.BitmapFactory.decodeResourceStrea m(BitmapFactory.java:476)
07-22 22:36:51.090: I/dalvikvm(26085): at android.graphics.BitmapFactory.decodeResource(Bitm apFactory.java:499)
07-22 22:36:51.090: I/dalvikvm(26085): at android.graphics.BitmapFactory.decodeResource(Bitm apFactory.java:529)
07-22 22:36:51.095: I/dalvikvm(26085): at com.example.ejercicios3.Prueba3GridLayout_JuegoMem orion$linearListener$3.run(Prueba3GridLayout_Juego Memorion.java:187)
07-22 22:36:51.100: I/dalvikvm(26085): at java.util.Timer$TimerImpl.run(Timer.java:284)
07-22 22:36:51.105: A/libc(26085): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 28587 (Timer-5)
Responder Con Cita


  #2  
Viejo 23/07/13, 08:50:45
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Comentado ya muchísimas veces, y me cuesta trabajo pensar que no lo hayas encontrado con una simple búsqueda en Google.

La gestión de Bitmap de Android es pésima, se van colocando en memoria pero no se van liberando, salvo que lo hagas tú. Incluso puedes cerrar una Activity que usaba Bitmap, lanzar una nueva, y aún seguirás teniendo memoria ocupada por los Bitmap de la Activity anterior.

La mejor solución es usar recycle sobre cada Bitmap que dejas de usar, pero hay veces que eso es imposible de controlar (Por ejemplo un ListView de Bitmap). La solución fácil y que suele funcionar bastante bien es usar SoftReference o WeakReference. De esta forma el sistema si hará una gestión algo más eficiente de la memoria.

De todas formas para tu caso lo mejor es que declares los TransitionDrawable fuera una sola vez, y que en el onClick simplemente llames al schedule del Timer.
Responder Con Cita
  #3  
Viejo 23/07/13, 11:40:23
Array

[xs_avatar]
manolazo manolazo no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Buenas, hice una sola busqueda infructuosa y pensé que el error era un poco raro.

De todas formas el codigo que he puesto esta resumido y el onClick no se llama una, sino muchas veces con lo cual ya he probado lo de poner el TransitionDrawable fuera no se libera la memoria se va acumulando y al cabo de 7 clicks peta.

Miraré lo del SoftReference y WeakReference a ver!!

Gracias.
Responder Con Cita
  #4  
Viejo 23/07/13, 12:53:24
Array

[xs_avatar]
set92 set92 no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Mensajes: 468
Modelo de smartphone: samsung
Tu operador: Movistar
Añadiendo informacion a la respuesta de Kriogen vi este articulo el otro dia y me parecio interesante para lo que comenta de las WeakReferences https://weblogs.java.net/blog/enicho...tanding_w.html
__________________
Gracias a todos aquellos que no piensan en lo que cuesta diseñar/desarrollar una app, que no pagan ni 5 miseros euros y fastidian a todos los programadores, es un gran aliciente para todos los futuros programadores como yo
Responder Con Cita
  #5  
Viejo 24/07/13, 00:56:55
Array

[xs_avatar]
manolazo manolazo no está en línea
Miembro del foro
 
Fecha de registro: jun 2012
Localización: Madrid
Mensajes: 219
Modelo de smartphone: Samsung Galaxy S7 edge
Tu operador: Pepephone
Buenas.

Lo solucione como dijo Kriogen leyendo algunos post que tiene, con el uso de softReference y con este enlace:

andrewbrobinson.com/2012/03/05/image-caching-in-android/

Última edición por manolazo Día 28/07/13 a las 12:08:54.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 08:10:54 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /