SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Imágenes, Loaders y Persistencia
¿EN QUÉ CONSISTE LA APP?
• Es una app Android para poder hacer uso como
usuario de la web wedfotospain.com.	

• Permite buscar y pedir fotógrafos de boda según
donde vivas, tu presupuesto, tu estilo…	

• Tiene un repertorio muy amplio de fotógrafos de
gran calidad con galerías.
Puntos clave:
3 meses de desarrollo.
Imágenes
Persistencia de datos
Carga de datos
MUCHAS IMÁGENES, POCA
RAM
• Apps Android tienen poca RAM: 16MB - 288MB
• JPGs de 50KB pueden ser 7MB-10MB en bitmap.	

• Muchas imágenes = app sin imágenes.
OutOfMemoryException.
LIBRERÍAS DE CARGA DE
IMÁGENES
Universal Image Loader:
• Altamente configurable.	

• Permite decir qué tipo de
caché usar, cuándo y su
tamaño.	

• IMPORTANTE: Sólo puede
cargar imágenes en el hilo
de la UI (hasta versión
1.9.2).
Square’s Picasso:
• Muy sencillo de usar.	

• Poco configurable.	

• Puede cargar imágenes
donde quiera.
• Evitar cargar imágenes con getDrawable() o en XML:	

• Carga las imágenes a máxima calidad (JPGs con canal
alpha).	

• Usar la configuración RGB_565 que consume mucho
menos que la ARGB_8888.	

• Usar BitmapFactory.inJustDecodeBounds para saber
el tamaño del Bitmap y BitmapFactory.inSampleSize
para cargarla con mejor o peor calidad u outWidth u
outHeight para el tamaño exacto.
LOADERS
• Permiten cargar datos en segundo plano:	

• Enmascaran el origen.	

• Se adaptan a los giros de pantalla y otros
cambios.	

• Tienen callbacks.
CÓMO USARLOS
• La Activity o Fragment debe implementar
LoaderManager.LoaderCallbacks<T>.
• Debe pedirse que se registre el Loader con
getLoaderManager().initLoader(id, bundle,
callback).	

• onCreateLoader() debe devolver una instancia del
Loader que se vaya a usar.
CÓMO USARLOS
• onLoadFinished() se encargará de actualizar la UI con
los datos cargados del Loader.
• Distintos tipos de Loaders:	

• Loader.	

• CursorLoader.	

• AsyncTaskLoader - usado aquí.
PERSISTENCIA:
• El 90% del contenido de la app
proviene de API online.	

• Es necesario garantizar la
persistencia de los datos
descargados y su coherencia con
los dados por la API.
PERSISTENCIA
• Para ello: SQLite y llamadas a API Rest.	

• Problemas:	

• DB de Web no adaptada a API:
• No hay tombstones.	

• No hay timestamps aprovechables.	

• No hay sistema de login por tokens o similares.	

• Datos muy dependientes. Un fallo en la cadena puede dejar muy tocada
la app.
MÁS PROBLEMAS
• ORM en Android está poco avanzado.Toca
hacerlo a mano.	

• Conexión va y viene. ¿Qué pasa si se va mientras
se hace la carga inicial de datos?
POSIBLES SOLUCIONES
• Usar transacciones:	

• db.beginTransaction()
• db.setTransactionSuccessful()
• db.endTransaction()
POSIBLES SOLUCIONES
• Adaptar la API:	

• Crear tombstones.	

• Poner timestamps que reflejen actividad.	

• Crear tablas que reflejen cambios.
PERSISTENCIA + LOADERS =
WIN
• Con Loaders puedes decir “quiero cargar fotógrafos”:	

• El Loader resolverá si con lo que le has enviado quieres
cargar locales u online.	

• Puede hacer mezcla de ambos (primero descarga, luego
carga de BD).	

• Transparente a la Activity o Fragment que haga de
presentador.
GRACIAS ESPECIALES A:
Germán Ruiz, gran persona, mejor cliente (¡y fotógrafo!).
Gracias por vuestra
atención
Sobre mí:	

blog.arasthel.com	

@arasthel92	

contacto@arasthel.com

Más contenido relacionado

Similar a WFSpain Android App - Imágenes y persistencia

Ionic y angular.js
Ionic y angular.jsIonic y angular.js
Ionic y angular.jsGDG Cali
 
Tecnologías Detrás de las Redes Sociales
Tecnologías Detrás de las Redes SocialesTecnologías Detrás de las Redes Sociales
Tecnologías Detrás de las Redes SocialesAnthony Castro
 
Instalacion adobe dream weaver
Instalacion adobe dream weaverInstalacion adobe dream weaver
Instalacion adobe dream weaverLuis Viteri
 
Programación web
Programación webProgramación web
Programación weberic291285
 
Aplicaciones web enriquecidas "RIA"
Aplicaciones web enriquecidas "RIA"Aplicaciones web enriquecidas "RIA"
Aplicaciones web enriquecidas "RIA"Erick Cerna
 
Desarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsDesarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsAsier Marqués
 
Webinar Monitorización Proactiva con HPE AppPulse Active
Webinar Monitorización Proactiva con HPE AppPulse ActiveWebinar Monitorización Proactiva con HPE AppPulse Active
Webinar Monitorización Proactiva con HPE AppPulse ActiveGlobe Testing
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Desarrollo Ágil De Aplicaciones Web
Desarrollo Ágil De Aplicaciones WebDesarrollo Ágil De Aplicaciones Web
Desarrollo Ágil De Aplicaciones WebAndrés Max
 
Rendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressRendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressLibreCon
 
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk   AWS Roadshow Bogota MexicoIntroduccion a Elastic Beanstalk   AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk AWS Roadshow Bogota MexicoHermann Pais
 
azure-logic elementos de seleccion cuando utilizarlos
azure-logic elementos de seleccion cuando utilizarlosazure-logic elementos de seleccion cuando utilizarlos
azure-logic elementos de seleccion cuando utilizarloscarlos_eduardo_84
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresGermán Küber
 

Similar a WFSpain Android App - Imágenes y persistencia (20)

Ionic y angular.js
Ionic y angular.jsIonic y angular.js
Ionic y angular.js
 
Comenzando a usar el Continuous Delivery
 Comenzando a usar el Continuous Delivery Comenzando a usar el Continuous Delivery
Comenzando a usar el Continuous Delivery
 
Tecnologías Detrás de las Redes Sociales
Tecnologías Detrás de las Redes SocialesTecnologías Detrás de las Redes Sociales
Tecnologías Detrás de las Redes Sociales
 
Cappuccino
Cappuccino Cappuccino
Cappuccino
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Instalacion adobe dream weaver
Instalacion adobe dream weaverInstalacion adobe dream weaver
Instalacion adobe dream weaver
 
Programación web
Programación webProgramación web
Programación web
 
Aplicaciones web enriquecidas "RIA"
Aplicaciones web enriquecidas "RIA"Aplicaciones web enriquecidas "RIA"
Aplicaciones web enriquecidas "RIA"
 
Desarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsDesarrollo de Mobile Web Apps
Desarrollo de Mobile Web Apps
 
Intro20 socioeconomia
Intro20 socioeconomiaIntro20 socioeconomia
Intro20 socioeconomia
 
Webinar Monitorización Proactiva con HPE AppPulse Active
Webinar Monitorización Proactiva con HPE AppPulse ActiveWebinar Monitorización Proactiva con HPE AppPulse Active
Webinar Monitorización Proactiva con HPE AppPulse Active
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
Desarrollo Ágil De Aplicaciones Web
Desarrollo Ágil De Aplicaciones WebDesarrollo Ágil De Aplicaciones Web
Desarrollo Ágil De Aplicaciones Web
 
Rendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPressRendimiento y velocidad, acelera tu sitio WordPress
Rendimiento y velocidad, acelera tu sitio WordPress
 
Introduccion ios
Introduccion iosIntroduccion ios
Introduccion ios
 
osCommerce
osCommerceosCommerce
osCommerce
 
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk   AWS Roadshow Bogota MexicoIntroduccion a Elastic Beanstalk   AWS Roadshow Bogota Mexico
Introduccion a Elastic Beanstalk AWS Roadshow Bogota Mexico
 
Sesion dos azuay
Sesion dos azuaySesion dos azuay
Sesion dos azuay
 
azure-logic elementos de seleccion cuando utilizarlos
azure-logic elementos de seleccion cuando utilizarlosazure-logic elementos de seleccion cuando utilizarlos
azure-logic elementos de seleccion cuando utilizarlos
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 

WFSpain Android App - Imágenes y persistencia

  • 1. Imágenes, Loaders y Persistencia
  • 2. ¿EN QUÉ CONSISTE LA APP? • Es una app Android para poder hacer uso como usuario de la web wedfotospain.com. • Permite buscar y pedir fotógrafos de boda según donde vivas, tu presupuesto, tu estilo… • Tiene un repertorio muy amplio de fotógrafos de gran calidad con galerías.
  • 3.
  • 4. Puntos clave: 3 meses de desarrollo. Imágenes Persistencia de datos Carga de datos
  • 5. MUCHAS IMÁGENES, POCA RAM • Apps Android tienen poca RAM: 16MB - 288MB • JPGs de 50KB pueden ser 7MB-10MB en bitmap. • Muchas imágenes = app sin imágenes. OutOfMemoryException.
  • 6. LIBRERÍAS DE CARGA DE IMÁGENES Universal Image Loader: • Altamente configurable. • Permite decir qué tipo de caché usar, cuándo y su tamaño. • IMPORTANTE: Sólo puede cargar imágenes en el hilo de la UI (hasta versión 1.9.2). Square’s Picasso: • Muy sencillo de usar. • Poco configurable. • Puede cargar imágenes donde quiera.
  • 7. • Evitar cargar imágenes con getDrawable() o en XML: • Carga las imágenes a máxima calidad (JPGs con canal alpha). • Usar la configuración RGB_565 que consume mucho menos que la ARGB_8888. • Usar BitmapFactory.inJustDecodeBounds para saber el tamaño del Bitmap y BitmapFactory.inSampleSize para cargarla con mejor o peor calidad u outWidth u outHeight para el tamaño exacto.
  • 8. LOADERS • Permiten cargar datos en segundo plano: • Enmascaran el origen. • Se adaptan a los giros de pantalla y otros cambios. • Tienen callbacks.
  • 9. CÓMO USARLOS • La Activity o Fragment debe implementar LoaderManager.LoaderCallbacks<T>. • Debe pedirse que se registre el Loader con getLoaderManager().initLoader(id, bundle, callback). • onCreateLoader() debe devolver una instancia del Loader que se vaya a usar.
  • 10. CÓMO USARLOS • onLoadFinished() se encargará de actualizar la UI con los datos cargados del Loader. • Distintos tipos de Loaders: • Loader. • CursorLoader. • AsyncTaskLoader - usado aquí.
  • 11. PERSISTENCIA: • El 90% del contenido de la app proviene de API online. • Es necesario garantizar la persistencia de los datos descargados y su coherencia con los dados por la API.
  • 12. PERSISTENCIA • Para ello: SQLite y llamadas a API Rest. • Problemas: • DB de Web no adaptada a API: • No hay tombstones. • No hay timestamps aprovechables. • No hay sistema de login por tokens o similares. • Datos muy dependientes. Un fallo en la cadena puede dejar muy tocada la app.
  • 13. MÁS PROBLEMAS • ORM en Android está poco avanzado.Toca hacerlo a mano. • Conexión va y viene. ¿Qué pasa si se va mientras se hace la carga inicial de datos?
  • 14.
  • 15. POSIBLES SOLUCIONES • Usar transacciones: • db.beginTransaction() • db.setTransactionSuccessful() • db.endTransaction()
  • 16. POSIBLES SOLUCIONES • Adaptar la API: • Crear tombstones. • Poner timestamps que reflejen actividad. • Crear tablas que reflejen cambios.
  • 17. PERSISTENCIA + LOADERS = WIN • Con Loaders puedes decir “quiero cargar fotógrafos”: • El Loader resolverá si con lo que le has enviado quieres cargar locales u online. • Puede hacer mezcla de ambos (primero descarga, luego carga de BD). • Transparente a la Activity o Fragment que haga de presentador.
  • 18. GRACIAS ESPECIALES A: Germán Ruiz, gran persona, mejor cliente (¡y fotógrafo!).
  • 19. Gracias por vuestra atención Sobre mí: blog.arasthel.com @arasthel92 contacto@arasthel.com