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 adaptabl...
!
!
!
!
!
It is not the strongest of the species that survives, nor the
most intelligent, but rather the one most adaptabl...
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 Androi...
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 compa...
Algunas trastadas
• El framework mutante (fragmentación del SO)
• “No uses singleton, usa Application"
• Librería de compa...
God Activity
God Activity
• Descargar datos de un servidor
• Parser JSON
• Guardar datos en la BBDD
• Recuperar datos de la BBDD
• Most...
God Activity
• Descargar datos de un servidor
• Parser JSON
• Guardar datos en la BBDD
• Recuperar datos de la BBDD
• Most...
God Activity:
el Origen del Mal
startManagingCursor(Cursor c)!
This method allows the activity to take care of
managing th...
SOLID?
• Single Responsibility Principle!
• Open/closed Principle
• Liskov Substitution Principle
• Interface Segregation ...
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 model...
AsyncTask +
startManagingCursor
Loaders!!
Loaders Callbacks
• Modelo acoplado a la activity (SRP)
• CursorLoader
• Mismos problemas de rendimiento que
AsyncTask
• D...
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...
Fixing Loaders?
ViewHolder
ViewHolder
• Es un patrón que corrompe el código el adapter
• Soluciona un problema que ya no existe
• Alternativa: Render...
God Fragment
!
Remember?
SauronActivity
“Una Activity para gobernarlos a todos; una
Activity para encontrarlos; una Activity para
atraerlos a todos...
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 e...
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
anter...
Remember!
¡Muchas gracias!
Q & A
Rubén Serrano Núñez!
@Akelael
plus.google.com/+RubénSerrano
Evolución Android: Del Framework a la supervivencia del más fuerte
Upcoming SlideShare
Loading in …5
×

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

711 views

Published on

El software, como las especies, tiene que evolucionar para no extinguirse. Desarrollar para Android puede ser muy rápido una vez conoces el framework, pero a la larga, los mismos componentes que te permiten ir rápido al principo, pueden suponer el peor obstáculo para hacer crecer una aplicación. En esta charla veremos algunos de estos compenentes, cuáles son sus ventajas, cuáles son sus problemas más adelante, y algunas estrategias que podemos seguir para evitar que nuestro proyecto muera.

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
711
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Evolución Android ! Del framework a la supervivencia del más fuerte
  2. 2. Who? Rubén Serrano Núñez (@Akelael)! Lead Android Developer @RedboothHQ GDG Barcelona Organizer
  3. 3. ! ! ! ! ! It is not the strongest of the species that survives, nor the most intelligent, but rather the one most adaptable to change. Charles Darwin
  4. 4. ! ! ! ! ! It is not the strongest of the species that survives, nor the most intelligent, but rather the one most adaptable to change. Charles Darwin
  5. 5. It’s the same for software development
  6. 6. Cuestión de genes …
  7. 7. • Junio 2012 - Versión Android inicial • Julio 2013 - Cambio del equipo de desarrollo • Noviembre 2013 - Desarrollo Android in-house
  8. 8. Teambox Redbooth Beta Redbooth
  9. 9. WTF?! Un mes?!?!
  10. 10. “The Flying Spaghetti Monster approves Spaghetti Code”
  11. 11. “It’s the maintenance!”
  12. 12. Creationists vs Evolutionists
  13. 13. Creacionista
  14. 14. Creacionista
  15. 15. Evolucionista
  16. 16. Evolucionista
  17. 17. Los peligros de Android
  18. 18. El más peligroso de todos
  19. 19. El más peligroso de todos bueno, vale, no lo es
  20. 20. Algunas trastadas • El framework mutante (fragmentación del SO)
  21. 21. Algunas trastadas • El framework mutante (fragmentación del SO) • “No uses singleton, usa Application”
  22. 22. Lo puse todo en Application y … ¡Quita eso de ahí, guarro!
  23. 23. Algunas trastadas • El framework mutante (fragmentación del SO) • “No uses singleton, usa Application" • Librería de compatibilidad
  24. 24. Algunas trastadas • El framework mutante (fragmentación del SO) • “No uses singleton, usa Application" • Librería de compatibilidad • “Usa RelativeLayout… mejor no lo uses”
  25. 25. God Activity
  26. 26. God Activity • Descargar datos de un servidor • Parser JSON • Guardar datos en la BBDD • Recuperar datos de la BBDD • Mostrar datos en la pantalla
  27. 27. God Activity • Descargar datos de un servidor • Parser JSON • Guardar datos en la BBDD • Recuperar datos de la BBDD • Mostrar datos en la pantalla
  28. 28. 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.
  29. 29. SOLID? • Single Responsibility Principle! • Open/closed Principle • Liskov Substitution Principle • Interface Segregation Principle • Dependency Inversion Principle
  30. 30. God Activity: el Final Desacoplar lógica y modelo: • SOLID • MVP, MVC, MVVM, etc • Ports & Adapter, Clean Architecture, etc
  31. 31. 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
  32. 32. AsyncTask + startManagingCursor
  33. 33. Loaders!!
  34. 34. Loaders Callbacks • Modelo acoplado a la activity (SRP) • CursorLoader • Mismos problemas de rendimiento que AsyncTask • Da rabia, porque realmente funciona bien
  35. 35. 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
  36. 36. Fixing Loaders?
  37. 37. ViewHolder
  38. 38. ViewHolder • Es un patrón que corrompe el código el adapter • Soluciona un problema que ya no existe • Alternativa: Renderers®
  39. 39. God Fragment ! Remember?
  40. 40. 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
  41. 41. SauronActivity • Porque no tener una sola activity y muchos Fragments?
  42. 42. SauronActivity Múltiples fragments == • Horda de loaders! (degradación de la performance) • Memory leaks • God Activity
  43. 43. 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
  44. 44. SyncAdapter • Objetivo muy loable: sincronizar BBDD con servidor de forma que ahorre batería • Problema: cuándo sucede?
  45. 45. 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.
  46. 46. Remember!
  47. 47. ¡Muchas gracias!
  48. 48. Q & A Rubén Serrano Núñez! @Akelael plus.google.com/+RubénSerrano

×