Top Banner
Evolución Android Del framework a la supervivencia del más fuerte
49

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

May 10, 2015

Download

Software

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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