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