Avisos

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 13/12/13, 13:26:49
Array

[xs_avatar]
softruz softruz no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2009
Mensajes: 15
Modelo de smartphone: HTC Touch

Cargar ImageView como Facebook

Muy buenas foro, estoy realizando una aplicación que muestra de 1 - N ImageView, pero como es normal me sale el tan sufrido OOM (OutOfMemory) y he decidido se que los imageview se cargen como en el facebook, es decir, que cuando se este mostrando en pantalla el imageview este esté cargado pero sino se muestre que desaparezca de memoria y cuando vuelva a entrar en la pantalla se vuelva a cargar,

¿alguien tiene o sabe como puedo desarrollar esto?

Un Saludo. y Mil Gracias.
Responder Con Cita


  #2  
Viejo 13/12/13, 14:24:52
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
Teóricamente si usas un ListView (o GridView, o derivados) el sistema te lo debe gestionar automáticamente, aunque hay veces que sigue dejando mierda y termina dando el error, pero tarda más en producirse.

La mejor forma para evitar estos errores es usar SoftReference o WeakReference, aunque hay mucha gente que dice que es una mala solución y es mejor controlar el Bitmap y hacer los disposes a mano, pero yo todos los errores que he tenido con muchos Bitmaps los he terminado solucionando siempre con SoftReference.

Otra cosa es que si estás usando la clase Gallery o HorizontalScrollView, da igual lo que hagas, la gestión de memoria de los Bitmap tendrás que hacerla a mano y aún así es muy costosa. Ya que esas 2 clases no tienen reutilización de vista, lo que no está en pantalla sigue en memoria.
Responder Con Cita
  #3  
Viejo 13/12/13, 17:43:53
Array

[xs_avatar]
softruz softruz no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2009
Mensajes: 15
Modelo de smartphone: HTC Touch

Gallery

Antetodo gracias, estoy utilizando la clase Gallery y estoy creando la tipica galeria con reflección y cuando son muchos bitmap dan el error OOM, tienes un ejemplo para esto no me ocurra, mira mi codigo es este:

try
{
bitmapWithReflection = Bitmap.createBitmap(nWidth,nHeigth, Config.ARGB_8888);
}
catch(OutOfMemoryError E)
{
Log.d("ANDRO_ASYNC",String.valueOf(E.getMessage()) );
}

Gracias
Responder Con Cita
  #4  
Viejo 13/12/13, 17:56:44
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
Es lo que te he dicho, usando Gallery es muy difícil controlarlo.

Prueba usando SoftReference, a ver como se comporta.
Responder Con Cita
  #5  
Viejo 13/12/13, 18:38:38
Array

[xs_avatar]
softruz softruz no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2009
Mensajes: 15
Modelo de smartphone: HTC Touch

Tendrias un ejemplo de como utilizar SoftReference?

Gracias
Responder Con Cita
  #6  
Viejo 13/12/13, 19:11:49
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
Es fácil, metes el Bitmap dentro de un objeto SoftReference, y luego cada vez que quieras usarlo lo sacas de ahí. Haciendo esto cuando Android necesite memoria lo primero que va a hacer es eliminar las imágenes que no necesite. Si aún así te sigue dando problemas cámbialo por WeakReference.

Con tu ejemplo:

bitmapWithReflection = new SoftReference<Bitmap>(Bitmap.createBitmap(nWidth,n Heigth, Config.ARGB_8888));

El objeto bitmapWithReflection tendrá que ser de tipo SoftReference<Bitmap>

Y en los sitios donde lo uses tendrás que usar:

bitmapWithReflection.get()

Si haces comparaciones nulas con el objeto en algún sitio, ten en cuenta que puede ser nulo tanto el SoftReference como su contenido, es decir, en tu caso puede ser nulo bitmapWithReflection o bitmapWithReflection.get(). El segundo caso ocurrirá cuando Android lo haya eliminado de la memoria por necesitarla, el objeto SoftReference sigue vivo, pero su contenido se ha vaciado.
Responder Con Cita
  #7  
Viejo 14/12/13, 09:42:07
Array

[xs_avatar]
softruz softruz no está en línea
Usuario novato en la web
 
Fecha de registro: jun 2009
Mensajes: 15
Modelo de smartphone: HTC Touch

Gracias, lo he probado con Soft... y Weak... y sigue pasando lo mismo, tienes alguna otra idea que pueda desarrollar, yo he pensado cargar solo unas 10 imagenes y cuando llegue al final carge otras 10 y así sucesivamente, sabrias algo mejor ? y si ves buena opcion lo de cargar 10 imagenes sabrias, como implementar esto con una clase extends BaseAdapter, es decir, si la carga de estas imagenes con sucesivas cargas las tendria que realizar en mi clase:
ImageAdapter extends BaseAdapter

Gracias.
Responder Con Cita
Respuesta

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



Hora actual: 19:01:34 (GMT +2)



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

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