WFSpain Android App - Imágenes y persistencia

Post on 04-Jul-2015

114 views 0 download

Transcript of WFSpain Android App - Imágenes y persistencia

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