SlideShare una empresa de Scribd logo
Developing FOR Android 
(The Movie) 
Una película de 
José Manuel Pereira 
v3.0
¿QuiÉn SOY? 
José Manuel Pereira 
@JMPergar 
jmpergar.com
¿QuÉ hago? 
Android Software ? 
Engineer at 
Homo Curiositus 
Organizer of 
GDG Barcelona
Redbooth platform https://redbooth.com/api/ 
jobs@redbooth.com 
https://redbooth.com/jobs
EL Porqué DE ESTA PONENCIA 
¡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. 
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)
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.
¿CÓmo LO HAGO? 
Kaizen 改善 
(Mejora continua) 
Done is better than perfect. 
Si tras 6 meses tu código no te da 
vergüenza, no lo estás haciendo bien. 
(PROGRASTOTOLES 499 a.c)
¿Básico? 
Yo he visto cosas que vosotros no creeríais
Show me the “movida”
Naming 
Mi nombre es Íñigo Montoya 
¡El que sea, pero aplica uno! 
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.
Naming 
Antes Después
Naming 
Drawables 
group_type_name_state_suffix 
→ actionbar_icon_create_disabled, common_background_app 
Layouts 
type_name_suffix 
→ activity_login, fragment_profile, adapter_user, include_header_premium 
Dimens 
property_default_group_type_name 
→ fontsize_default, height_common_button 
Id’s 
type_name 
→ cv_footer, tv_name, iv_avatar 
Classes 
NameBaseType 
→ BaseActivity, ProfileFragment, ScreenUtils, RenderFactory, UserMVO, PostDAO 
Common names 
colors.xml, config.xml, dimens.xml, strings.xml, plurals.xml, arrays.xml, styles.xml, themes. 
xml...
Packaging 
What’s in the box?? 
¡El que sea, pero aplica uno! 
Básico para ser organizado. 
Es la base de nuestras arquitecturas.
Packaging 
¿Model 
VIEW 
PRESENTER?
Architecture 
MVC, MVP, Clean Architecture, 
Ports and Adapters... 
Usa la arquitectura que quieras, 
pero aplica S.O.L.I.D. 
(Barroso dixit) 
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]
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
S.O.L.I.D. 
Principio de Responsabilidad Única 
“Una clase debería tener una y sólo 
una razón para cambiar” 
(Robert C. Martin) 
Un objeto debe tener una única 
responsabilidad. 
Contraejemplo: The God Activity
S.O.L.I.D. 
Principio Abierto / Cerrado 
Todo módulo debe estar abierto 
para 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.” 
Los objetos de un programa deben poder 
reemplazarse por instancias de sus subtipos 
sin alterar la correctitud del programa. 
Contraejemplo: Context
S.O.L.I.D. 
Principio de Segregación de Interfaces 
“Los clientes no deben ser forzados a 
depender de interfaces que no 
necesitan” 
Es preferible muchas interfaces 
específicas de cliente que una interfaz de 
uso general. 
(Robert C. Martin) 
Contraejemplo: ViewPager.OnPageChangeListener
S.O.L.I.D. 
Principio de Inversión de Dependencias 
Debemos depender de las abstracciones 
y no de las concreciones. 
Ejemplos: Capas, base de datos, servicios, librerias...
S.O.L.I.D. 
Es la única manera de disminuir el número de 
programadores que cometen suicidio. 
(BECARIOTON 470 a.c.)
Fragmentation and the framework 
Desacoplar 
del framework es 
parte de la 
solución 
Hardware 
Versiones 
Pantallas 
Forks Fabricantes
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í, pero NO
Context 
MAL
Context 
MEJOR
Context 
Más información en 
Context, What Context? 
http://www.doubleencore.com/2013/06/context/
Memory Leaks 
Se considera una fuga de memoria a cualquier objeto 
que perdura tras no utilizarlo o necesitarlo más. 
Cada vez que guardamos una referencia al 
Context de una Activity el Garbage Collector llora. 
Llora muuuucho.
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 en 
Google 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 
Flavors 
Groups 
Gestión de 
dependencias
Google+ 
http://goo.gl/2zgvlp
Referencias 
The CommonsBlog http://commonsware.com/blog/ 
sgoliver.net blog http://www.sgoliver.net/blog/?page_id=3011 
Cyril 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.html 
double 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

Más contenido relacionado

PDF
Limpiando espero la arquitectura que yo quiero
PPTX
Visteme con 'Clean Architecture' que tengo prisas
PPTX
Workshop: Testeando nuestra aplicaciones.
PDF
From Legacy to Hexagonal (An Unexpected Android Journey)
PPT
Ebooks
PPT
Tutorial Android 1
PDF
Android development beyond the basics
PPTX
Sq lite
Limpiando espero la arquitectura que yo quiero
Visteme con 'Clean Architecture' que tengo prisas
Workshop: Testeando nuestra aplicaciones.
From Legacy to Hexagonal (An Unexpected Android Journey)
Ebooks
Tutorial Android 1
Android development beyond the basics
Sq lite

Destacado (20)

PPTX
DOCX
Android de la A a la Z - Unidad 7
ODP
Python en Android,Charla del FUDcon Latam 2012
ODT
Importar Modulo Android
PPT
Desarrollo de apps Android basadas en localización
PPTX
Android Training (Storing data using SQLite)
PPTX
opentsdb in a real enviroment
PDF
6.6 catalogo 2014 alfaomega
PDF
Primer Ejemplo de Proyecto en Android Studio
PPT
Desarrollo android almacenamiento de datos
PPT
Curso Introducción a android
PPTX
android sqlite
PPTX
Monitoring MySQL with OpenTSDB
PPTX
09.1. Android - Local Database (Sqlite)
PPTX
Android Database
PPTX
Descarga de libros electrónicos en eBooks Collection (EBSCO)
PPTX
base de datos para dispositivos móviles
PPTX
SQLite
PDF
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
Android de la A a la Z - Unidad 7
Python en Android,Charla del FUDcon Latam 2012
Importar Modulo Android
Desarrollo de apps Android basadas en localización
Android Training (Storing data using SQLite)
opentsdb in a real enviroment
6.6 catalogo 2014 alfaomega
Primer Ejemplo de Proyecto en Android Studio
Desarrollo android almacenamiento de datos
Curso Introducción a android
android sqlite
Monitoring MySQL with OpenTSDB
09.1. Android - Local Database (Sqlite)
Android Database
Descarga de libros electrónicos en eBooks Collection (EBSCO)
base de datos para dispositivos móviles
SQLite
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
Publicidad

Similar a Developing for Android (The movie) (20)

PDF
Android Superstar - Buenas Prácticas
PPTX
Android master class
PDF
Desarrollo en Android: Conceptos Básicos
PDF
MobileCONGalicia Introducción a Android
PPTX
Sesión 04 - Aplicaciones móviles ATI.pptx
PDF
Taller Android seedrocket
ODT
Materiaeloy
PPTX
Iniciación android
PPTX
Android basics v3
PDF
¿Cómo iniciarse en programación Android?
PPTX
Introducción al desarrollo Android, Sesión 1
PPTX
Android UC3M Sesión 1
PDF
LIBRO DE ANDROID
PPT
Curso desarrollo en android
PPTX
Presentación de eclipse(componentes básicos)
PDF
Slides1
PPTX
Android Basics v2.5
PPTX
Píldoras android i. Intro - 2ª parte
KEY
Android la plataforma móvil open source
PPTX
Conferencia android
Android Superstar - Buenas Prácticas
Android master class
Desarrollo en Android: Conceptos Básicos
MobileCONGalicia Introducción a Android
Sesión 04 - Aplicaciones móviles ATI.pptx
Taller Android seedrocket
Materiaeloy
Iniciación android
Android basics v3
¿Cómo iniciarse en programación Android?
Introducción al desarrollo Android, Sesión 1
Android UC3M Sesión 1
LIBRO DE ANDROID
Curso desarrollo en android
Presentación de eclipse(componentes básicos)
Slides1
Android Basics v2.5
Píldoras android i. Intro - 2ª parte
Android la plataforma móvil open source
Conferencia android
Publicidad

Último (9)

PPTX
Fundamentos de Python - Curso de Python dia 1
PPTX
Control de seguridad en los sitios web.pptx
PPTX
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
PDF
Presentacion de compiladores e interpretes
PPTX
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PPTX
Conceptos basicos de Base de Datos y sus propiedades
PDF
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
PPTX
Implementación equipo monitor12.08.25.pptx
Fundamentos de Python - Curso de Python dia 1
Control de seguridad en los sitios web.pptx
ORIGEN DE LA IA - GRADO 1102 INTELIGENCIA
Presentacion de compiladores e interpretes
Tratará sobre Grafos_y_Arboles_Presentacion.pptx
AutoCAD Herramientas para el futuro, Juan Fandiño
Conceptos basicos de Base de Datos y sus propiedades
Clase 3 - Presentación visual (Insertando objetos visuales) POWER POINT.pdf
Implementación equipo monitor12.08.25.pptx

Developing for Android (The movie)

  • 1. Developing FOR Android (The Movie) Una película de José Manuel Pereira v3.0
  • 2. ¿QuiÉn SOY? José Manuel Pereira @JMPergar jmpergar.com
  • 3. ¿QuÉ hago? Android Software ? Engineer at Homo Curiositus Organizer of GDG Barcelona
  • 4. Redbooth platform https://redbooth.com/api/ jobs@redbooth.com https://redbooth.com/jobs
  • 5. EL Porqué DE ESTA PONENCIA ¡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. 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)
  • 6. 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)
  • 7. ¡AVISO! ¡NO RULES! Conjunto de consejos, ejemplos y principios.
  • 8. ¿CÓmo LO HAGO? Kaizen 改善 (Mejora continua) Done is better than perfect. Si tras 6 meses tu código no te da vergüenza, no lo estás haciendo bien. (PROGRASTOTOLES 499 a.c)
  • 9. ¿Básico? Yo he visto cosas que vosotros no creeríais
  • 10. Show me the “movida”
  • 11. Naming Mi nombre es Íñigo Montoya ¡El que sea, pero aplica uno! 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.
  • 13. Naming Drawables group_type_name_state_suffix → actionbar_icon_create_disabled, common_background_app Layouts type_name_suffix → activity_login, fragment_profile, adapter_user, include_header_premium Dimens property_default_group_type_name → fontsize_default, height_common_button Id’s type_name → cv_footer, tv_name, iv_avatar Classes NameBaseType → BaseActivity, ProfileFragment, ScreenUtils, RenderFactory, UserMVO, PostDAO Common names colors.xml, config.xml, dimens.xml, strings.xml, plurals.xml, arrays.xml, styles.xml, themes. xml...
  • 14. Packaging What’s in the box?? ¡El que sea, pero aplica uno! Básico para ser organizado. Es la base de nuestras arquitecturas.
  • 16. Architecture MVC, MVP, Clean Architecture, Ports and Adapters... Usa la arquitectura que quieras, pero aplica S.O.L.I.D. (Barroso dixit) 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]
  • 17. 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
  • 18. S.O.L.I.D. Principio de Responsabilidad Única “Una clase debería tener una y sólo una razón para cambiar” (Robert C. Martin) Un objeto debe tener una única responsabilidad. Contraejemplo: The God Activity
  • 19. S.O.L.I.D. Principio Abierto / Cerrado Todo módulo debe estar abierto para la extensión, pero cerrado para la modificación. Contraejemplo: El Adapter pintalotodo
  • 20. 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.” Los objetos de un programa deben poder reemplazarse por instancias de sus subtipos sin alterar la correctitud del programa. Contraejemplo: Context
  • 21. S.O.L.I.D. Principio de Segregación de Interfaces “Los clientes no deben ser forzados a depender de interfaces que no necesitan” Es preferible muchas interfaces específicas de cliente que una interfaz de uso general. (Robert C. Martin) Contraejemplo: ViewPager.OnPageChangeListener
  • 22. S.O.L.I.D. Principio de Inversión de Dependencias Debemos depender de las abstracciones y no de las concreciones. Ejemplos: Capas, base de datos, servicios, librerias...
  • 23. S.O.L.I.D. Es la única manera de disminuir el número de programadores que cometen suicidio. (BECARIOTON 470 a.c.)
  • 24. Fragmentation and the framework Desacoplar del framework es parte de la solución Hardware Versiones Pantallas Forks Fabricantes
  • 25. 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
  • 29. Context Más información en Context, What Context? http://www.doubleencore.com/2013/06/context/
  • 30. Memory Leaks Se considera una fuga de memoria a cualquier objeto que perdura tras no utilizarlo o necesitarlo más. Cada vez que guardamos una referencia al Context de una Activity el Garbage Collector llora. Llora muuuucho.
  • 31. 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.
  • 32. Memory Leaks Muerte por OutOfMemoryError ¡OJO!
  • 33. Memory Leaks Más información en Google I/O 2011: Memory management for Android Apps https://www.youtube.com/watch?v=_CruQY55HOk
  • 34. FRONT-END Layouts Styles Themes Dimens Colors Animations Los Resources son tus amigos. No los abandones, úsalos. Campaña apadrina un Resource.
  • 38. FRONT-END tools attributes http://tools.android.com/tech-docs/tools-attributes
  • 39. Graddle is coming Build Types Flavors Flavors Groups Gestión de dependencias
  • 41. Referencias The CommonsBlog http://commonsware.com/blog/ sgoliver.net blog http://www.sgoliver.net/blog/?page_id=3011 Cyril 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.html double 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