developing for android (the movie)
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
Developing FOR Android(The Movie)
Una película de
José Manuel Pereira
v3.0
¿QuiÉn SOY?
José Manuel Pereira
jmpergar.com
@JMPergar
¿QuÉ hago?
Homo Curiositus
?Android Software Engineer at
Organizer ofGDG Barcelona
[email protected]://redbooth.com/jobs
Redbooth platform https://redbooth.com/api/
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.
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)
¡AVISO!
¡NO RULES!Conjunto de consejos, ejemplos y principios.
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?
Yo he visto cosas que vosotros no creeríais
¿Básico?
Show me the “movida”
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!
Naming
Antes Después
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...
Packaging
What’s in the box??
Básico para ser organizado.Es la base de nuestras arquitecturas.
¡El que sea, pero aplica uno!
¿ModelVIEW
PRESENTER?
Packaging
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)
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
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.
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
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.
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.
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...
Es la única manera de disminuir el número de programadores que cometen suicidio.
(BECARIOTON 470 a.c.)
S.O.L.I.D.
Desacoplar del framework es
parte de la solución
Fragmentation and the framework
Hardware
VersionesPantallas
FabricantesForks
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
Context
Sí, per
o NO
Context
MAL
Context
MEJOR
Más información enContext, What Context?
http://www.doubleencore.com/2013/06/context/
Context
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.
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.
Memory Leaks
Muerte por
OutOfMemoryError
¡OJO!
Memory Leaks
Más información enGoogle I/O 2011: Memory management for Android Apps
https://www.youtube.com/watch?v=_CruQY55HOk
FRONT-END
Layouts Styles Themes
Dimens Colors Animations
Los Resources son tus amigos.
No los abandones, úsalos.
Campaña apadrina un Resource.
FRONT-END
include
FRONT-END
merge
FRONT-END
ViewStub
FRONT-END
tools attributes
http://tools.android.com/tech-docs/tools-attributes
Graddle is coming
Build Types Flavors
FlavorsGroups
Gestión de dependencias
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
Referencias
PREGUNTAS
¡Gracias!
jmpegar.com