Developing for Android (The movie)

44
Developing FOR Android (The Movie) Una película de José Manuel Pereira v3.0

description

Tras tres años programando en la plataforma Android esta es la película de mi vida como Android Developer, un conjunto de buenas practicas y conceptos necesarios que aún a día de hoy sigo viendo que no se cumplen en la mayoría de proyectos con los que me cruzo. Son la conclusiones sacadas de mi experiencia y de multitud de debates con compañeros. Se abordan temas como: fragmentación, uso de la clase Context, naming, maquetación en Android, memory leaks y S.O.L.I.D.

Transcript of Developing for Android (The movie)

Page 1: Developing for Android (The movie)

Developing FOR Android(The Movie)

Una película de

José Manuel Pereira

v3.0

Page 2: Developing for Android (The movie)

¿QuiÉn SOY?

José Manuel Pereira

jmpergar.com

@JMPergar

Page 3: Developing for Android (The movie)

¿QuÉ hago?

Homo Curiositus

?Android Software Engineer at

Organizer ofGDG Barcelona

Page 4: Developing for Android (The movie)

[email protected]://redbooth.com/jobs

Redbooth platform https://redbooth.com/api/

Page 5: Developing for Android (The movie)

EL Porqué DE ESTA PONENCIA

No hay excusas.YOU ARE YOUR CODE but...

It's easy to hate code you didn't write, without an understanding of the context in which it was written.

(Martin Fowler)

¡Sube, Marty!¡El cliente quiere un proyecto para ayer!

Equipos con poca experiencia.Problemas para optimizar y corregir.

Repetimos los mismos errores. No aplicamos Unit Testing.

Page 6: Developing for Android (The movie)

La REALIDAD

Un proyecto no dura mucho…Un proyecto no dura poco…

Dura exactamente lo que se necesita.

COMO MíNIMO(Gandalf en una stand up de SCRUM)

Page 7: Developing for Android (The movie)

¡AVISO!

¡NO RULES!Conjunto de consejos, ejemplos y principios.

Page 8: Developing for Android (The movie)

Kaizen 改善(Mejora continua)

Done is better than perfect.

Si tras 6 meses tu código no te davergüenza, no lo estás haciendo bien.

(PROGRASTOTOLES 499 a.c)

¿CÓmo LO HAGO?

Page 9: Developing for Android (The movie)

Yo he visto cosas que vosotros no creeríais

¿Básico?

Page 10: Developing for Android (The movie)

Show me the “movida”

Page 11: Developing for Android (The movie)

Naming

Mi nombre es Íñigo Montoya

Identifica actores del framework.Identifica patrones.

Respeta los nombres comunes y crea los tuyos.Aplícalo en todos los niveles.Muy importante en los recursos.

¡El que sea, pero aplica uno!

Page 12: Developing for Android (The movie)

Naming

Antes Después

Page 13: Developing for Android (The movie)

Naming

Drawablesgroup_type_name_state_suffix

→ actionbar_icon_create_disabled, common_background_appLayouts

type_name_suffix→ activity_login, fragment_profile, adapter_user, include_header_premium

Dimensproperty_default_group_type_name

→ fontsize_default, height_common_buttonId’s

type_name→ cv_footer, tv_name, iv_avatar

ClassesNameBaseType

→ BaseActivity, ProfileFragment, ScreenUtils, RenderFactory, UserMVO, PostDAOCommon names

colors.xml, config.xml, dimens.xml, strings.xml, plurals.xml, arrays.xml, styles.xml, themes.xml...

Page 14: Developing for Android (The movie)

Packaging

What’s in the box??

Básico para ser organizado.Es la base de nuestras arquitecturas.

¡El que sea, pero aplica uno!

Page 15: Developing for Android (The movie)

¿ModelVIEW

PRESENTER?

Packaging

Page 16: Developing for Android (The movie)

Architecture

Te permitirá aplicar TESTING unitario.https://www.youtube.com/watch?v=I0qDmbwGz3o [Fernando Cejas] https://www.youtube.com/watch?v=EwcrTVmu7f4 [Jorge Barroso]

Te conducirá a aplicar PATRONES.https://www.youtube.com/watch?v=tt3zI9cKiWU [Pedro Vicente]

Hará tu app más sólida y ESCALABLE.https://www.youtube.com/watch?v=ROdIvrLL1ao [Jorge Barroso]

https://www.youtube.com/watch?v=N6yqe88ysNw [Pedro Vicente]

MVC, MVP, Clean Architecture,Ports and Adapters...

Usa la arquitectura que quieras,pero aplica S.O.L.I.D.

(Barroso dixit)

Page 17: Developing for Android (The movie)

S.O.L.I.D.

The Single responsibility principle

The Open closed principle

The Liskov substitution principle

The Interface segregation principle

The Dependency inversion principle

Page 18: Developing for Android (The movie)

Principio de Responsabilidad Única

Contraejemplo: The God Activity

“Una clase debería tener una y sólouna razón para cambiar”

(Robert C. Martin)

Un objeto debe tener una única responsabilidad.

S.O.L.I.D.

Page 19: Developing for Android (The movie)

S.O.L.I.D.

Principio Abierto / Cerrado

Todo módulo debe estar abiertopara la extensión, pero cerrado

para la modificación.

Contraejemplo: El Adapter pintalotodo

Page 20: Developing for Android (The movie)

S.O.L.I.D.

Principio de Sustitución de Liskov

“Si parece un pato y grazna como un pato, pero necesita pilas,

probablemente no sea un pato.”

Contraejemplo: Context

Los objetos de un programa deben poder reemplazarse por instancias de sus subtipos

sin alterar la correctitud del programa.

Page 21: Developing for Android (The movie)

S.O.L.I.D.

Principio de Segregación de Interfaces

“Los clientes no deben ser forzados a depender de interfaces que no

necesitan”(Robert C. Martin)

Contraejemplo: ViewPager.OnPageChangeListener

Es preferible muchas interfaces específicas de cliente que una interfaz de

uso general.

Page 22: Developing for Android (The movie)

S.O.L.I.D.

Principio de Inversión de Dependencias

Debemos depender de las abstraccionesy no de las concreciones.

Ejemplos: Capas, base de datos, servicios, librerias...

Page 23: Developing for Android (The movie)

Es la única manera de disminuir el número de programadores que cometen suicidio.

(BECARIOTON 470 a.c.)

S.O.L.I.D.

Page 24: Developing for Android (The movie)

Desacoplar del framework es

parte de la solución

Fragmentation and the framework

Hardware

VersionesPantallas

FabricantesForks

Page 25: Developing for Android (The movie)

Context

Context es probablemente el elemento más usado en el desarrollo de aplicaciones Android…

y quizás también el peor usado.

Application Activity Service

BroadcastReceiver ContentProvider

Page 26: Developing for Android (The movie)

Context

Sí, per

o NO

Page 27: Developing for Android (The movie)

Context

MAL

Page 28: Developing for Android (The movie)

Context

MEJOR

Page 29: Developing for Android (The movie)

Más información enContext, What Context?

http://www.doubleencore.com/2013/06/context/

Context

Page 30: Developing for Android (The movie)

Memory Leaks

Cada vez que guardamos una referencia al Context de una Activity el Garbage Collector llora.

Llora muuuucho.

Se considera una fuga de memoria a cualquier objeto que perdura tras no utilizarlo o necesitarlo más.

Page 31: Developing for Android (The movie)

Memory Leaks

No guardar referencias al context-activity

Trata de usar context-application en lugar de context-activity

Usa WeakReference cuando no tengas más remedio que guardar las referencias.

Evitar Inner Class no estáticas.

Cuidado con las Static References.

Page 32: Developing for Android (The movie)

Memory Leaks

Muerte por

OutOfMemoryError

¡OJO!

Page 33: Developing for Android (The movie)

Memory Leaks

Más información enGoogle I/O 2011: Memory management for Android Apps

https://www.youtube.com/watch?v=_CruQY55HOk

Page 34: Developing for Android (The movie)

FRONT-END

Layouts Styles Themes

Dimens Colors Animations

Los Resources son tus amigos.

No los abandones, úsalos.

Campaña apadrina un Resource.

Page 35: Developing for Android (The movie)

FRONT-END

include

Page 36: Developing for Android (The movie)

FRONT-END

merge

Page 37: Developing for Android (The movie)

FRONT-END

ViewStub

Page 38: Developing for Android (The movie)

FRONT-END

tools attributes

http://tools.android.com/tech-docs/tools-attributes

Page 39: Developing for Android (The movie)

Graddle is coming

Build Types Flavors

FlavorsGroups

Gestión de dependencias

Page 40: Developing for Android (The movie)

Google+

http://goo.gl/2zgvlp

Page 41: Developing for Android (The movie)

Referencias

The CommonsBlog http://commonsware.com/blog/sgoliver.net blog http://www.sgoliver.net/blog/?page_id=3011Cyril Mottier http://cyrilmottier.com/Dan Lew Codes http://blog.danlew.net/Antonio Leiva http://antonioleiva.com/ANDROID TALES http://android.amberfog.com/Android Coding http://android-coding.blogspot.com.es/Styling Android http://blog.stylingandroid.com/Android Weekly http://androidweekly.net/vogella.com http://www.vogella.com/tutorials/android.htmldouble encore http://www.doubleencore.com/tag/android/Android-er http://android-er.blogspot.com.es/Youtube: Android Developers https://www.youtube.com/user/androiddevelopers

AndroCode http://androcode.es/Android Developers Blog http://android-developers.blogspot.com.es/Grokking Android http://www.grokkingandroid.com/ANDROID DESIGN PATTERNS http://www.androiddesignpatterns.com/

Twitter List https://twitter.com/JMPergar/android-dev-must/members

Android Arsenal http://android-arsenal.com/AndroidViews http://www.androidviews.net/Square Code Styles http://goo.gl/yZqppi

Page 42: Developing for Android (The movie)

Referencias

Page 43: Developing for Android (The movie)

PREGUNTAS

Page 44: Developing for Android (The movie)

¡Gracias!

jmpegar.com