YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

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

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

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

!

!

!

!

!

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

!

!

!

!

!

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

It’s the same for software development

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

Cuestión de genes …

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

• 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

Teambox Redbooth Beta Redbooth

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

WTF?! Un mes?!?!

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

“The Flying Spaghetti Monster approves Spaghetti Code”

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

“It’s the maintenance!”

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

Creationists

vs

Evolutionists

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

Creacionista

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

Creacionista

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

Evolucionista

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

Evolucionista

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

Los peligros de Android

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

El más peligroso de todos

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

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

Algunas trastadas

• El framework mutante (fragmentación del SO)

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

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

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

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

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

God Activity

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

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

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

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

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

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

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

AsyncTask + startManagingCursor

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

Loaders!!

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

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

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

Fixing Loaders?

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

ViewHolder

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

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

God Fragment!

Remember?

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

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

SauronActivity

• Porque no tener una sola activity y muchos Fragments?

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

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

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

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
Page 46: Evolución Android: Del Framework a la supervivencia del más fuerte

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

Remember!

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

¡Muchas gracias!

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

Q & A

Rubén Serrano Núñez!@Akelael plus.google.com/+RubénSerrano


Related Documents