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.
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?
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.