SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
Evolución Android !
Del framework a la
supervivencia del más fuerte
Who?
Rubén Serrano Núñez (@Akelael)!
Lead Android Developer @RedboothHQ
GDG Barcelona Organizer
!
!
!
!
!
It is not the strongest of the species that survives, nor the
most intelligent, but rather the one most adaptable to change.
Charles Darwin
!
!
!
!
!
It is not the strongest of the species that survives, nor the
most intelligent, but rather the one most adaptable to change.
Charles Darwin
It’s the same for software development
Cuestión de genes …
• Junio 2012 - Versión Android inicial
• Julio 2013 - Cambio del equipo de desarrollo
• Noviembre 2013 - Desarrollo Android in-house
Teambox Redbooth Beta Redbooth
WTF?! Un mes?!?!
“The Flying Spaghetti Monster approves Spaghetti Code”
“It’s the maintenance!”
Creationists
vs
Evolutionists
Creacionista
Creacionista
Evolucionista
Evolucionista
Los peligros de Android
El más peligroso de todos
El más peligroso de todos
bueno, vale, no lo es
Algunas trastadas
• El framework mutante (fragmentación del SO)
Algunas trastadas
• El framework mutante (fragmentación del SO)
• “No uses singleton, usa Application”
Lo puse todo
en Application
y …
¡Quita eso de
ahí, guarro!
Algunas trastadas
• El framework mutante (fragmentación del SO)
• “No uses singleton, usa Application"
• Librería de compatibilidad
Algunas trastadas
• El framework mutante (fragmentación del SO)
• “No uses singleton, usa Application"
• Librería de compatibilidad
• “Usa RelativeLayout… mejor no lo uses”
God Activity
God Activity
• Descargar datos de un servidor
• Parser JSON
• Guardar datos en la BBDD
• Recuperar datos de la BBDD
• Mostrar datos en la pantalla
God Activity
• Descargar datos de un servidor
• Parser JSON
• Guardar datos en la BBDD
• Recuperar datos de la BBDD
• Mostrar datos en la pantalla
God Activity:
el Origen del Mal
startManagingCursor(Cursor c)!
This method allows the activity to take care of
managing the given Cursor's lifecycle for you
based on the activity's lifecycle.
SOLID?
• Single Responsibility Principle!
• Open/closed Principle
• Liskov Substitution Principle
• Interface Segregation Principle
• Dependency Inversion Principle
God Activity: el Final
Desacoplar lógica y modelo:
• SOLID
• MVP, MVC, MVVM, etc
• Ports & Adapter, Clean Architecture, etc
AsyncTask
• Mal usada, interfiere con el código de la Activity
• Solía utilizarse como excusa para hacer la carga
del modelo en la Activity
• Presenta problemas de performance
AsyncTask +
startManagingCursor
Loaders!!
Loaders Callbacks
• Modelo acoplado a la activity (SRP)
• CursorLoader
• Mismos problemas de rendimiento que
AsyncTask
• Da rabia, porque realmente funciona bien
Fixing Loaders?
1. No uses loaders
2. Desacopla la lógica de negocio y el modelo
3. Aplica la carga asíncrona en el modelo
4. Utiliza un bus de evento o
LocalBroadcastReceiver para anunciar
eventos de carga de datos
Fixing Loaders?
ViewHolder
ViewHolder
• Es un patrón que corrompe el código el adapter
• Soluciona un problema que ya no existe
• Alternativa: Renderers®
God Fragment
!
Remember?
SauronActivity
“Una Activity para gobernarlos a todos; una
Activity para encontrarlos; una Activity para
atraerlos a todos y atarlos a las tinieblas”
- El Señor de los Fragments
SauronActivity
• Porque no tener una sola activity y muchos
Fragments?
SauronActivity
Múltiples fragments ==
• Horda de loaders! (degradación de la
performance)
• Memory leaks
• God Activity
ContentProviders
• Ideado para compartir datos con terceras
aplicaciones
• Obligatorio para CursorLoaders
• No simplifica el código de acceso a la BBDD
• God ContentProvider
• Problemas con ORMs
SyncAdapter
• Objetivo muy loable: sincronizar BBDD con
servidor de forma que ahorre batería
• Problema: cuándo sucede?
Mejorando la genética del
código
• SOLID
• Testing, mejor si es con JUnit
• Patrones/arquitecturas que favorezcan lo
anterior: Presenter First, Ports & Adapters, Clean
Architecture, Onion Layer, etc.
Remember!
¡Muchas gracias!
Q & A
Rubén Serrano Núñez!
@Akelael
plus.google.com/+RubénSerrano

Contenu connexe

Similaire à Evolución Android: Del Framework a la supervivencia del más fuerte

VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Pegandose con android
Pegandose con androidPegandose con android
Pegandose con androidcampusmilenio
 
Pegándose con Android
Pegándose con AndroidPegándose con Android
Pegándose con Androidcampusmilenio
 
Inyección de dependencias en Node.js con InversifyJS & TypeScript
Inyección de dependencias en Node.js con  InversifyJS & TypeScriptInyección de dependencias en Node.js con  InversifyJS & TypeScript
Inyección de dependencias en Node.js con InversifyJS & TypeScriptRemo Jansen
 
Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1findemor
 
Android UC3M Sesión 1
Android UC3M Sesión 1Android UC3M Sesión 1
Android UC3M Sesión 1topoos
 
Desarrollo Móvil con Android (...y Firebase)
Desarrollo Móvil con Android (...y Firebase)Desarrollo Móvil con Android (...y Firebase)
Desarrollo Móvil con Android (...y Firebase)Armando Picón Z.
 
Qué puede aprender Drupal de Plone
Qué puede aprender Drupal de PloneQué puede aprender Drupal de Plone
Qué puede aprender Drupal de Plonementtes
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
 
Consideraciones al diseñar aplicaciones móviles para la nube
Consideraciones al diseñar aplicaciones móviles para la nubeConsideraciones al diseñar aplicaciones móviles para la nube
Consideraciones al diseñar aplicaciones móviles para la nubeOracle User Group Mexico
 
Salesforce Lightning Components
Salesforce Lightning ComponentsSalesforce Lightning Components
Salesforce Lightning ComponentsDavid Carnicer
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoMicael Gallego
 

Similaire à Evolución Android: Del Framework a la supervivencia del más fuerte (20)

VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Pegandose con android
Pegandose con androidPegandose con android
Pegandose con android
 
Pegándose con Android
Pegándose con AndroidPegándose con Android
Pegándose con Android
 
Inyección de dependencias en Node.js con InversifyJS & TypeScript
Inyección de dependencias en Node.js con  InversifyJS & TypeScriptInyección de dependencias en Node.js con  InversifyJS & TypeScript
Inyección de dependencias en Node.js con InversifyJS & TypeScript
 
Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1Introducción al desarrollo Android, Sesión 1
Introducción al desarrollo Android, Sesión 1
 
Android UC3M Sesión 1
Android UC3M Sesión 1Android UC3M Sesión 1
Android UC3M Sesión 1
 
Xamarin Basics
Xamarin BasicsXamarin Basics
Xamarin Basics
 
Desarrollo Móvil con Android (...y Firebase)
Desarrollo Móvil con Android (...y Firebase)Desarrollo Móvil con Android (...y Firebase)
Desarrollo Móvil con Android (...y Firebase)
 
Qué puede aprender Drupal de Plone
Qué puede aprender Drupal de PloneQué puede aprender Drupal de Plone
Qué puede aprender Drupal de Plone
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Day01
Day01Day01
Day01
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
Consideraciones al diseñar aplicaciones móviles para la nube
Consideraciones al diseñar aplicaciones móviles para la nubeConsideraciones al diseñar aplicaciones móviles para la nube
Consideraciones al diseñar aplicaciones móviles para la nube
 
Salesforce Lightning Components
Salesforce Lightning ComponentsSalesforce Lightning Components
Salesforce Lightning Components
 
Java
JavaJava
Java
 
Web móvil. Desarrollo de Apps y Aplicación en Bibliotecas
Web móvil. Desarrollo de Apps y Aplicación en BibliotecasWeb móvil. Desarrollo de Apps y Aplicación en Bibliotecas
Web móvil. Desarrollo de Apps y Aplicación en Bibliotecas
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigo
 

Evolución Android: Del Framework a la supervivencia del más fuerte