SlideShare una empresa de Scribd logo
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

Más contenido relacionado

Similar a 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 android
campusmilenio
 
Pegándose con Android
Pegándose con AndroidPegándose con Android
Pegándose con Android
campusmilenio
 
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
Remo 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 1
findemor
 
Android UC3M Sesión 1
Android UC3M Sesión 1Android UC3M Sesión 1
Android UC3M Sesión 1
topoos
 
Xamarin Basics
Xamarin BasicsXamarin Basics
Xamarin Basics
Sergio Gasca García
 
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 Plone
menttes
 
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
Alfredo 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/2012
Alfredo Chavez
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
Ricard Clau
 
Day01
Day01Day01
Day01
peterpunk
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
Erasmo Domínguez Jiménez
 
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
Oracle User Group Mexico
 
Salesforce Lightning Components
Salesforce Lightning ComponentsSalesforce Lightning Components
Salesforce Lightning Components
David Carnicer
 
Java
JavaJava
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
Col·legi Oficial de Bibliotecaris i Documentalistes de la Comunitat Valenciana (COBDCV)
 
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
Micael Gallego
 

Similar a 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
 

Último

PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
JhenryHuisa1
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
AlanL15
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
KatiuskaDominguez2
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
holabuscafiesta
 

Último (6)

PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
 

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