SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Android de la A a la Z - Unidad 7
Android de la A a la Z - Unidad 7Android de la A a la Z - Unidad 7
Android de la A a la Z - Unidad 7Jorge Ulises
 
Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Ernesto Crespo
 
Importar Modulo Android
Importar Modulo AndroidImportar Modulo Android
Importar Modulo Android★ Raúl Laza
 
Desarrollo de apps Android basadas en localización
Desarrollo de apps Android basadas en localizaciónDesarrollo de apps Android basadas en localización
Desarrollo de apps Android basadas en localizaciónSlashMobility.com
 
Android Training (Storing data using SQLite)
Android Training (Storing data using SQLite)Android Training (Storing data using SQLite)
Android Training (Storing data using SQLite)Khaled Anaqwa
 
opentsdb in a real enviroment
opentsdb in a real enviromentopentsdb in a real enviroment
opentsdb in a real enviromentChen Robert
 
Desarrollo android almacenamiento de datos
Desarrollo android    almacenamiento de datosDesarrollo android    almacenamiento de datos
Desarrollo android almacenamiento de datosFernando Cejas
 
android sqlite
android sqliteandroid sqlite
android sqliteDeepa Rani
 
Monitoring MySQL with OpenTSDB
Monitoring MySQL with OpenTSDBMonitoring MySQL with OpenTSDB
Monitoring MySQL with OpenTSDBGeoffrey Anderson
 
09.1. Android - Local Database (Sqlite)
09.1. Android - Local Database (Sqlite)09.1. Android - Local Database (Sqlite)
09.1. Android - Local Database (Sqlite)Oum Saokosal
 
Descarga de libros electrónicos en eBooks Collection (EBSCO)
Descarga de libros electrónicos en eBooks Collection (EBSCO)Descarga de libros electrónicos en eBooks Collection (EBSCO)
Descarga de libros electrónicos en eBooks Collection (EBSCO)Bibliotecas UDLAP
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móvilesyavidamian
 
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUponHBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUponCloudera, Inc.
 

Destaque (20)

SQLite
SQLiteSQLite
SQLite
 
Android de la A a la Z - Unidad 7
Android de la A a la Z - Unidad 7Android de la A a la Z - Unidad 7
Android de la A a la Z - Unidad 7
 
Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012Python en Android,Charla del FUDcon Latam 2012
Python en Android,Charla del FUDcon Latam 2012
 
Importar Modulo Android
Importar Modulo AndroidImportar Modulo Android
Importar Modulo Android
 
SQLite3
SQLite3SQLite3
SQLite3
 
Desarrollo de apps Android basadas en localización
Desarrollo de apps Android basadas en localizaciónDesarrollo de apps Android basadas en localización
Desarrollo de apps Android basadas en localización
 
Android Training (Storing data using SQLite)
Android Training (Storing data using SQLite)Android Training (Storing data using SQLite)
Android Training (Storing data using SQLite)
 
opentsdb in a real enviroment
opentsdb in a real enviromentopentsdb in a real enviroment
opentsdb in a real enviroment
 
6.6 catalogo 2014 alfaomega
6.6 catalogo 2014 alfaomega6.6 catalogo 2014 alfaomega
6.6 catalogo 2014 alfaomega
 
Primer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android StudioPrimer Ejemplo de Proyecto en Android Studio
Primer Ejemplo de Proyecto en Android Studio
 
Desarrollo android almacenamiento de datos
Desarrollo android    almacenamiento de datosDesarrollo android    almacenamiento de datos
Desarrollo android almacenamiento de datos
 
Curso Introducción a android
Curso Introducción a androidCurso Introducción a android
Curso Introducción a android
 
android sqlite
android sqliteandroid sqlite
android sqlite
 
Monitoring MySQL with OpenTSDB
Monitoring MySQL with OpenTSDBMonitoring MySQL with OpenTSDB
Monitoring MySQL with OpenTSDB
 
09.1. Android - Local Database (Sqlite)
09.1. Android - Local Database (Sqlite)09.1. Android - Local Database (Sqlite)
09.1. Android - Local Database (Sqlite)
 
Android Database
Android DatabaseAndroid Database
Android Database
 
Descarga de libros electrónicos en eBooks Collection (EBSCO)
Descarga de libros electrónicos en eBooks Collection (EBSCO)Descarga de libros electrónicos en eBooks Collection (EBSCO)
Descarga de libros electrónicos en eBooks Collection (EBSCO)
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móviles
 
SQLite
SQLiteSQLite
SQLite
 
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUponHBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
HBaseCon 2012 | Lessons learned from OpenTSDB - Benoit Sigoure, StumbleUpon
 

Semelhante a Developing for Android (The movie)

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Artículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEArtículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEtorrubia
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
C# for Beginners
C# for BeginnersC# for Beginners
C# for BeginnersZaory Zaory
 
Paradigma de poo
Paradigma de pooParadigma de poo
Paradigma de poopixeleante
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.jsINSIGNIA4U
 
Inyección de dependencias en Node.js con InversifyJS & TypeScript
Inyección de dependencias en Node.js con  InversifyJS & TypeScriptInyección de dependencias en Node.js con  InversifyJS & TypeScript
Inyección de dependencias en Node.js con InversifyJS & TypeScriptRemo Jansen
 
Introducción a Spring Roo
Introducción a Spring RooIntroducción a Spring Roo
Introducción a Spring RooPaulo Clavijo
 
Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programadorBraulio Diez Botella
 
OpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinOpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinJavier Suárez Ruiz
 
Spring Inyección De Dependencias
Spring Inyección De DependenciasSpring Inyección De Dependencias
Spring Inyección De Dependenciasjose diaz
 

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

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Workshop Calabash Appium
Workshop Calabash AppiumWorkshop Calabash Appium
Workshop Calabash Appium
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
Workshop calabash appium
Workshop calabash appiumWorkshop calabash appium
Workshop calabash appium
 
Act 04
Act 04Act 04
Act 04
 
Artículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEArtículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSE
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
C# for Beginners
C# for BeginnersC# for Beginners
C# for Beginners
 
Paradigma de poo
Paradigma de pooParadigma de poo
Paradigma de poo
 
Code Blast 2012 - Node.js
Code Blast 2012 - Node.jsCode Blast 2012 - Node.js
Code Blast 2012 - Node.js
 
Charla - MVP con django (beta beers)
Charla - MVP con django (beta beers)Charla - MVP con django (beta beers)
Charla - MVP con django (beta beers)
 
Inyección de dependencias en Node.js con InversifyJS & TypeScript
Inyección de dependencias en Node.js con  InversifyJS & TypeScriptInyección de dependencias en Node.js con  InversifyJS & TypeScript
Inyección de dependencias en Node.js con InversifyJS & TypeScript
 
Introducción a Spring Roo
Introducción a Spring RooIntroducción a Spring Roo
Introducción a Spring Roo
 
Consejos de un perro viejo programador
Consejos de un perro viejo programadorConsejos de un perro viejo programador
Consejos de un perro viejo programador
 
OpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller XamarinOpenSouthCode 2018: Taller Xamarin
OpenSouthCode 2018: Taller Xamarin
 
Spring Inyección De Dependencias
Spring Inyección De DependenciasSpring Inyección De Dependencias
Spring Inyección De Dependencias
 
Android studio
Android studioAndroid studio
Android studio
 
Iphone
IphoneIphone
Iphone
 

Último

Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...AlexaRamirez39
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfjuanrubenc78
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdfRodrigo Cerón
 
Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfMiSpotify
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarjosuesj13
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfdaa100407
 
02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdfRodrigo Cerón
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfLeonardoOa4
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfdarosario3d
 

Último (9)

Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdf
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf
 
Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdf
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizar
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
 
02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdf
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
 

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