Buenas prácticas en el desarrollo Android
¿Quiénes somos? Androcode.es
Cómo desarrollar aplicaciones para Android
Principios básicos
Principios básicos
Java y Dalvik
Activities, Services, Intents, ...
Recursos (la clase R)
Cómo desarrollar buenas aplicaciones para Android
Principios de diseño
Encántame
Simplifica mi vida
Hazme asombroso
Principios de diseño
Encántame
Simplifica mi vida
Hazme asombroso
Encántame
Sorprende al usuario
Los objetos reales son más divertidos
Permite la personalización
Aprende del usuario
Principios de diseño
Encántame
Simplifica mi vida
Hazme asombroso
Simplifica mi vida
Sé simple, imágenes mejor que palabras
Muestra sólo lo que necesita el usuario
Decide por él, pero déjale la última palabra
No pierdas al usuario ni sus cosas
Interrumpe sólo si es necesario
Principios de diseño
Encántame
Simplifica mi vida
Hazme asombroso
Hazme asombroso
Proporciona trucos
Sé educado y claro
Divide tareas complejas
Haz tú el trabajo pesado
Las cosas importantes hazlas rápido
Patrones de diseño
Action Bar
De los elementos más importantes
Consistente con el sistema
Recoge acciones comunes
Ayuda a la navegación
Action Bar
1. Icono o logo
2. Control de vista / Título
3. Action Items
4. Menú
Action Bar
Up vs Back
Compatibilidad
Las teclas hardware desaparecen, pero entonces...
Compatibilidad
¿Y qué ocurre con los móviles con teclas físicas?
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar (para desechar)
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Pulsar
Mantener pulsado
Deslizar
Arrastrar
Doble pulsación
Pellizcar
Gestos
Avisos fuera de contexto
Indicar acción en segundo plano
Acceso rápido a acciones
Parte fundamental de Android
Notificaciones
Ojo con el flujo
¿Cuándo debo lanzar una?
Establece prioridad, sin ser egoísta 4.1+
Notificaciones enriquecidas 4.1+
Notificaciones sí... pero bien
Antipatrones
Cómo NO hacer las cosas bien
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
Botón atrás o salir
Controles brillantes
Iconos copiados
Pestañas en la parte baja
Flechas en elementos de listas
Interfaz iOS
o No abuses de los diálogos o Muchos casos son evitables o De carga bloqueantes o De error o De promoción o Toasts
Diálogos
o No abuses de los diálogos o Muchos casos son evitables o De carga bloqueantes o De error o De promoción o Toasts
Diálogos
o No abuses de los diálogos o Muchos casos son evitables o De carga bloqueantes o De error o De promoción o Toasts
Diálogos
o No abuses de los diálogos o Muchos casos son evitables o De carga bloqueantes o De error o De promoción o Toasts
Diálogos
o No abuses de los diálogos o Muchos casos son evitables o De carga bloqueantes o De error o De promoción o Toasts
Diálogos
Consecuencias significantes Puede darle por error y no puede deshacerse
¿Cuándo usar diálogos?
Lo que no se ve
Más que buena
No todo es interfaz
Estar al día
Ser adivina
Estar adaptada
Comportarse suavemente
Cómo no agotar la batería
Push vs Pull
Más es menos
Adapta tus descargas
Desarrollo
Consejos sobre cómo mejorar el desarrollo
Entorno de desarrollo
Haznos un favor, usa Maven o Proceso de construcción estándar o Enfocado en la automatización o Convención sobre configuración o Gestión de dependencias o Pruebas
https://code.google.com/p/maven-android-plugin/
Eclipse o IntelliJ IDEA
Eclipse o Soporte oficial o Más conocido
IntelliJ IDEA o Mejor soporte Maven o Utilidades para el desarrollo o Más estable
Support Library
Fragment, ListFragment, DialogFragment FragmentManager, FragmentTransaction FragmentPagerAdapter, FragmentStatePagerAdapter, FragmentTabHost LoaderManager, Loader, AsyncTaskLoader, CursorLoader NotificationCompat, ShareCompat, TaskStackBuilder
FragmentCompat, FragmentPagerAdapter FragmentStatePagerAdapter, FragmentTabHost
v4
GridLayout v7
v13
ActionBar Sherlock
Más librerías
androidviews.net
theultimateandroidlibrary.com
Ejecución de tareas
Threads y Handlers o Los viejos rockeros nunca mueren
AsyncTask o Probablemente la técnica más utilizada
o Ya no molan: ciclo de vida, ejecución en serie/paralelo, pérdidas de información,...
Loaders & Services o Yeah!
Opciones básicas de almacenamiento
Shared Preferences o Perfectas para las preferencias o ¡Ojo! el resultado es un fichero XML, no abuses
Internal Storage o Privado para tu aplicación
External Storage o En principio visible para todos o Comprueba siempre el estado
Opciones básicas de almacenamiento
Shared Preferences o Perfectas para las preferencias o ¡Ojo! el resultado es un fichero XML, no abuses
Internal Storage o Privado para tu aplicación
External Storage o En principio visible para todos o Comprueba siempre el estado
Nunca uses rutas absolutas
Usa los métodos que proporciona
android
Bases de Datos
Soporte completo de SQLite pero... ¿Porqué escribir SQL?
ORMLite Hay muchas, muchísimas Si puedes usa ContentProvider o Patrón fachada
o Puedes "publicar" tus datos o Gestión de multi-hilo y conexiones
Datos externos
Conectar o java.net o apache HTTP Client Consumir o org.json o org.w3c.dom o org.xml.sax
Datos externos
Conectar o java.net o apache HTTP Client Consumir o org.json o org.w3c.dom o org.xml.sax
¡TRUCAZO! Para tratar HTML como XML
tagsoup ¡Viene incluido!
Recursos
Recursos everywhere!
Enlaces
developers.android.com/design developers.android.com/develop youtube.com/user/androiddevelopers
App Clini, ADiA, ...
android-app-patterns.com androidniceties.tumblr.com androcode.es/tag/herramientas/
Enlaces
developers.android.com/design
Enlaces
developers.android.com/develop
Enlaces
androidniceties.tumblr.com
Enlaces
android-app-patterns.com
Enlaces
androcode.es/tag/herramientas/
Libros
¿Preguntas?