|
||
|
|
|
|||||||
| 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 |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
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);
Código:
final Handler handler = new Handler();
class runa implements Runnable{
@Override
public void run() {
im1.setImageDrawable(trans);
trans.startTransition(2000);
}
}
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) |
|
|
|
#2
|
||||
|
||||
|
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. |
|
#3
|
||||
|
||||
|
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. |
|
#4
|
||||
|
||||
|
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
__________________
|
|
#5
|
||||
|
||||
|
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. |
![]() |
Estás aquí
|
||||||
|
||||||
| Herramientas | |