Programación para android

Iniciado por Walle214, 18 Abril 2019, 17:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Walle214

Muy buenas, soy estudiante y estamos creando una app para un concurso, necesitamos usar un buen numero de imagenes gif, y la app se pone muy pesada si la metemos en drawable, como podemos hacer para que estas imagenes se descarguen después de instalar la app? De antemanos gracias

yuimugi912

podrias usar un webview con el codigo html
<img srt="ubicacionimagen"/>

srWhiteSkull

#2
Pesada en que sentido? La carga no permite continuar la aplicación? Se queda a la espera?

Te cuento mi experiencia,

yo tuve que afrontar un proyecto en Android en donde al principio la aplicación debía cargar como unos tropecientos usuarios desde una base de datos de un servidor. Hasta ahí bien sino fuera porque cada usuario disponía de una imagen de retrato que se antoja algunas veces imágenes con tamaños disparatados, ésto aparte de consumir un burrada de recursos en el teléfono también provocaba que la aplicación se pegara dos mil años para iniciarse. ¿Cómo atajé el problema? Pues tuve que incluir varios sistemas, el primero usar un hilo que impidiera que la aplicación se cerrara, ya que si el hilo principal de la actividad no responde el sistema lo da por muerto y te lo cierra. A ésto lo acompañé con una animación de carga con un gif del circulito dando vueltas, permitiendo además que el usuario pudiera al menos manipular la aplicación y éste no pensara que la aplicación estuviera colgada. Luego, lo siguiente que implementé fue que las imágenes cargadas fueran optimizadas reduciendo el tamaño de éstas, de ésta forma el consumo de recursos mejora notablemente. Y por último crear una caché, y ésto se traduce en que las imágenes se almacenan por primera vez en la aplicación y siguientes inicios con la aplicación mejoran la velocidad mostrando instantáneamente las imágenes, claro que pagando el precio de reducir memoria de almacenamiento.

Hay que tener en cuenta, que es necesario comprobar si hay espacio suficiente para crear un caché o adaptar el espacio que tengamos libre para meter las imágenes que podamos. También es necesario incluir un sistema que compruebe si hubo actualización con las imágenes incluyendo algún sistema que compruebe las imágenes, y yo al final lo que hice para no complicarme la vida es que la aplicación sólo cuando pasara 24 horas actualizaba nuevamente las imágenes, pero eso ya lo planteas como necesites, a lo mejor en tú caso no lo necesitas.

Espero que mi experiencia pueda darte alguna idea para mejorar resolver ese problema que tienes.

WHK


yuimugi912

Cita de: srWhiteSkull en 19 Abril 2019, 18:13 PM
Pesada en que sentido? La carga no permite continuar la aplicación? Se queda a la espera?

Te cuento mi experiencia,

yo tuve que afrontar un proyecto en Android en donde al principio la aplicación debía cargar como unos tropecientos usuarios desde una base de datos de un servidor. Hasta ahí bien sino fuera porque cada usuario disponía de una imagen de retrato que se antoja algunas veces imágenes con tamaños disparatados, ésto aparte de consumir un burrada de recursos en el teléfono también provocaba que la aplicación se pegara dos mil años para iniciarse. ¿Cómo atajé el problema? Pues tuve que incluir varios sistemas, el primero usar un hilo que impidiera que la aplicación se cerrara, ya que si el hilo principal de la actividad no responde el sistema lo da por muerto y te lo cierra. A ésto lo acompañé con una animación de carga con un gif del circulito dando vueltas, permitiendo además que el usuario pudiera al menos manipular la aplicación y éste no pensara que la aplicación estuviera colgada. Luego, lo siguiente que implementé fue que las imágenes cargadas fueran optimizadas reduciendo el tamaño de éstas, de ésta forma el consumo de recursos mejora notablemente. Y por último crear una caché, y ésto se traduce en que las imágenes se almacenan por primera vez en la aplicación y siguientes inicios con la aplicación mejoran la velocidad mostrando instantáneamente las imágenes, claro que pagando el precio de reducir memoria de almacenamiento.

Hay que tener en cuenta, que es necesario comprobar si hay espacio suficiente para crear un caché o adaptar el espacio que tengamos libre para meter las imágenes que podamos. También es necesario incluir un sistema que compruebe si hubo actualización con las imágenes incluyendo algún sistema que compruebe las imágenes, y yo al final lo que hice para no complicarme la vida es que la aplicación sólo cuando pasara 24 horas actualizaba nuevamente las imágenes, pero eso ya lo planteas como necesites, a lo mejor en tú caso no lo necesitas.

Espero que mi experiencia pueda darte alguna idea para mejorar resolver ese problema que tienes.

como creaste la cache?

srWhiteSkull

#5
Qués es una caché? Ficheros.

Por ejemplo te bajas una imagen llamada "perfil". Pues lo único que haces es volcar esa imagen a un fichero, "perfil.jpg". Luego en la siguiente inicialización antes de bajarte la imagen compruebas si existe "perfil.jpg", de ser así la cargas como un fichero normal y pasas esa imagen al componente drawable pertinente.

Aunque en apariencia puede parecer sencillo hay bastante complejidad. Yo para evitar que se detuviera la aplicación disponía de una clase que hacía ésto y que procesaba en un hilo, por lo que podían lanzarse muchísimos hilos a la vez, uno detrás de otro, con la suerte de que tenían un tiempo de vida de unos pocos segundos o menos dependiendo de la imagen. Se consumían recursos pero luego se liberaban.

Posiblemente existan librerías de terceros que hagan lo mismo pero muchas veces me gusta reinventar la rueda y hacerlo todo por mi cuenta, al fin y al cabo la clase sólo me supuso como 200 líneas de código.


yuimugi912

Cita de: srWhiteSkull en 20 Abril 2019, 15:36 PM
Qués es una caché? Ficheros.

Por ejemplo te bajas una imagen llamada "perfil". Pues lo único que haces es volcar esa imagen a un fichero, "perfil.jpg". Luego en la siguiente inicialización antes de bajarte la imagen compruebas si existe "perfil.jpg", de ser así la cargas como un fichero normal y pasas esa imagen al componente drawable pertinente.

Aunque en apariencia puede parecer sencillo hay bastante complejidad. Yo para evitar que se detuviera la aplicación disponía de una clase que hacía ésto y que procesaba en un hilo, por lo que podían lanzarse muchísimos hilos a la vez, uno detrás de otro, con la suerte de que tenían un tiempo de vida de unos pocos segundos o menos dependiendo de la imagen. Se consumían recursos pero luego se liberaban.

Posiblemente existan librerías de terceros que hagan lo mismo pero muchas veces me gusta reinventar la rueda y hacerlo todo por mi cuenta, al fin y al cabo la clase sólo me supuso como 200 líneas de código.




entiendo gracias  ;D , de todas formas android te obliga a usar threads cuando pones sockets o conexiones asi que solo abria que ampliar la clase :P