SlideShare a Scribd company logo
Clean Android Code
Fabio Collini

Droidcon Italy - Torino - 6/7 Febbraio 2014
@fabioCollini
linkedin.com/in/fabiocollini
Folder Organizer
Freapp
nana bianca
cosenonjaviste.it
Agenda
Definizione di Clean Code
Formattazione del codice
Clean code vs optimization
Best practices Java
Gestione delle risorse Android
Test
"The only way to make the deadline -- the only
way to go fast -- is to keep the code as clean as
possible at all times."
Clean code - Robert C. Martin
Definizione di Clean Code
Leggibile
Manutenibile
Espandibile
Espressivo
Corretto
Testabile
...
Formattazione del codice
Eclipse
Android Studio / IntelliJ
Clean code
Vs
optimization
android.view.View
itmrvtFas
n Piaelg;
/..
/.
pbi vi stsotaepc(ola iRo){
ulc od eIRoNmsaeboen sot
i (sot {
f iRo)
mrvtFas| I_OTNMSAE
Piaelg = SRO_AEPC;
}es {
le
mrvtFas& ~SRO_AEPC;
Piaelg = I_OTNMSAE
}
}
pbi boeniRoNmsae){
ulc ola sotaepc(
rtr (Piaelg&SRO_AEPC)! 0
eun mrvtFasI_OTNMSAE = ;
}
Ottimizzazione del codice
la classe View è istanziata molte volte all'interno di ogni
activity di ogni app
ha senso ottimizzare l'occupazione di memoria
ma nel codice di una app?
Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
Michael A. Jackson
Enum
storicamente su Android erano sconsigliate
con il JIT compiler la situazione è migliorata
Per evitare creazione di oggetti gli int sono molto usati
Tutte le risorse sono int nella classe R
txVe.eTx(0)
etiwstet10;
Cue b:adodcnetrsRsucsNtonEcpin
asd y nri.otn.e.eore$oFudxeto:
Srn rsuc I #x4
tig eore D 06
a adodcnetrsRsucsgtetRsucsjv:3)
t nri.otn.e.eore.eTx(eore.aa29
a adodwde.etiwstetTxVe.aa34)
t nri.igtTxVe.eTx(etiwjv:84
txVe.eTx(nee.otig10)
etiwstetItgrtSrn(0);
SimpleCursorTreeAdapter
Context
Cursor
int
String[]
int[]
int
String[]
int[]
SimpleCursorTreeAdapter
nwSmlCroTeAatrti,gopusr
e ipeusrredpe(hs ruCro,
adodRlyu.ipeepnal_itie_,
nri..aotsml_xadbels_tm2
nwSrn[{Clm1,"oun",
e tig]"oun" Clm2}
nwit]adodRi.et,adodRi.et}
e n[{nri..dtx1 nri..dtx2,
adodRlyu.ipels_tm1
nri..aotsml_itie_,
nwSrn[{Clm3,"oun",
e tig]"oun" Clm4}
nwit]adodRi.et,adodRi.et} {
e n[{nri..dtx1 nri..dtx2)
/..
/.
}
;
Usando classi/enum
Context
Cursor
Layout
Column[]
ViewId[]
Layout
Column[]
ViewId[]

Context
Cursor
LayoutColumnMapping
LayoutColumnMapping
D on't
R epeat
Y ourself
The first time you do something, you just do it.
The second time you do something similar, you
wince at the duplication, but you do the
duplicate thing anyway. The third time you do
something similar, you refactor.
Martin Fowler
Write
E verything
T wice
Coesione
e
disaccoppiamento
Activity
classe base da usare per creare una interfaccia grafica
nei casi semplici contengono tutto
possono diventare molto grandi e difficili da gestire
Fragment
interfacce responsive
ciclo di vita complicato
utili ma non semplici da usare
Custom View
classi che estendono una View
possono essere usate in un layout
usate per creare componenti nuovi
utili anche per raggruppare codice
ButterKnife
injection delle view in una classe
basato su annotation processing
semplice da usare
rende il codice più leggibile
Flow e Mortar
framework sviluppati da Square
basati su Dagger
sostitutivi ai fragment, semplificano il ciclo di vita
Risorse in un progetto Android
<eore>
rsucs
<tl nm=lyuSye>
sye ae"aottl"
<tmnm=adodlyu_it"mthprn<ie>
ie ae"nri:aotwdh>ac_aet/tm
<tmnm=adodlyu_egt>ac_aet/tm
ie ae"nri:aothih"mthprn<ie>
<tmnm=adodoinain>etcl/tm
ie ae"nri:retto"vria<ie>
<tmnm=adodgaiy>etr/tm
ie ae"nri:rvt"cne<ie>
<sye
/tl>
<tl nm=txVeClr>
sye ae"etiwoo"
<tmnm=adodtxSz"10p/tm
ie ae"nri:etie>5s<ie>
<tmnm=adodtxClr>555<ie>
ie ae"nri:etoo"#111/tm
<tmnm=adodlyu_it"wa_otn<ie>
ie ae"nri:aotwdh>rpcnet/tm
<tmnm=adodlyu_egt>rpcnet/tm
ie ae"nri:aothih"wa_otn<ie>
<sye
/tl>
<rsucs
/eore>
<eore>
rsucs
<tl nm=lyuSye prn=lyuSyeae>
sye ae"aottl" aet"aottlBs"
<tmnm=adodoinain>oiotl/tm
ie ae"nri:retto"hrzna<ie>
<sye
/tl>
<rsucs
/eore>
<eore>
rsucs
<oo nm=txClr>555<clr
clr ae"etoo"#111/oo>
<rsucs
/eore>
<eore>
rsucs
<ie nm=txSz"10p/ie>
dmn ae"etie>5s<dmn
<rsucs
/eore>
<eore>
rsucs
<ie nm=txSz"20p/ie>
dmn ae"etie>5s<dmn
<rsucs
/eore>
Include di layout
equivalente di un extract method
utile quando una piccola parte del layout cambia in base
alla configurazione
Tipi di risorse disponibili
Layout
Drawable
Stili
String
Animazioni
Color

Color state list
Boolean
Dimension
Id
Integer
Array
Il codice Java dovrebbe essere
indipendente dalle configurazioni
Test
Coperto da test Vs Testabile
L'architettura dell'app è fondamentale per avere codice
testabile
Dagger

A fast dependency injector for Android and Java
Dagger
Object: possono essere singleton
Module: classi Java che creano Object
ObjectGraph: creato runtime a partire
da più moduli
Scope
pbi OjcGahpu(bet. mdls {
ulc betrp lsOjc.. oue)
}

Permette di creare oggetti legati a scope:
Application
Activity
Fragment
Pro di Dagger
alto disaccoppiamento delle classi
validazione compile time delle dipendenze
moduli di test con stub e mock
EventBus
permette di usare una architettura basata su eventi
usando il metodo p s vengono invocati i metodi
ot
oEet
n v n degli oggetti che si sono registrati con
rgse
eitr
simile a Otto ma non basato su annotation
gestisce anche i thread in background
Uso di EventBus
Gerarchia di eventi: listener su classi base
Gli eventi possono essere Parcelable
Ciclo di vita Activity/cambio di orientation
Test su Android
JUnit
Roboelectric
Robotium
Espresso
...
Test Driven Development
pbi vi tsCluao( {
ulc od etacltr)
asrEul(,cluao.u(,2)
setqas4 acltrsm2 );
}
FEST Android
pbi vi tsU( {
ulc od eti)
asrTa(aot.siil(
sethtlyu)iVsbe)
.setcl)
iVria(
.aCidon()
hshlCut4
.aSoDvdr(HWDVDR_IDE;
hshwiiesSO_IIESMDL)
}
Quello che servirebbe...
pbi vi tsU( {
ulc od eti)
asrEul(aot mcu)
setqaslyu, okp;
}
Test della ui
utili per creare il caso di test
aggiungendo uno wait è possibile interagire con il device
Spoon permette di eseguire i test su più device e salvare
screenshot
Java 8
in uscita a Marzo
lambda expression e molte altre novità
cambierà il modo di scrivere codice
Riferimenti
Robert C. Martin - Clean code
Martin Fowler - Refactoring: Improving the Design of
Existing Code
Simpler Android apps with Flow and Mortar
github.com/JakeWharton/butterknife
github.com/square/dagger
github.com/greenrobot/EventBus
github.com/square/fest-android
Thanks for your attention!
Questions?

@fabioCollini
linkedin.com/in/fabiocollini

More Related Content

Viewers also liked

Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
Fabio Collini
 
Librerie su Android: come non reinventare la ruota @ whymca 2012
Librerie su Android: come non reinventare la ruota @ whymca 2012 Librerie su Android: come non reinventare la ruota @ whymca 2012
Librerie su Android: come non reinventare la ruota @ whymca 2012
Fabio Collini
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJava
Florina Muntenescu
 
Testable Android Apps DroidCon Italy 2015
Testable Android Apps DroidCon Italy 2015Testable Android Apps DroidCon Italy 2015
Testable Android Apps DroidCon Italy 2015
Fabio Collini
 
Android Wear CodeLab - GDG Firenze
Android Wear CodeLab - GDG FirenzeAndroid Wear CodeLab - GDG Firenze
Android Wear CodeLab - GDG Firenze
Fabio Collini
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
Fabio Collini
 
Introduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaIntroduction to Retrofit and RxJava
Introduction to Retrofit and RxJava
Fabio Collini
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
Fabio Collini
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
Fabio Collini
 
MVVM with DataBinding on android
MVVM with DataBinding on androidMVVM with DataBinding on android
MVVM with DataBinding on android
Rodrigo Bressan
 

Viewers also liked (10)

Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
 
Librerie su Android: come non reinventare la ruota @ whymca 2012
Librerie su Android: come non reinventare la ruota @ whymca 2012 Librerie su Android: come non reinventare la ruota @ whymca 2012
Librerie su Android: come non reinventare la ruota @ whymca 2012
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJava
 
Testable Android Apps DroidCon Italy 2015
Testable Android Apps DroidCon Italy 2015Testable Android Apps DroidCon Italy 2015
Testable Android Apps DroidCon Italy 2015
 
Android Wear CodeLab - GDG Firenze
Android Wear CodeLab - GDG FirenzeAndroid Wear CodeLab - GDG Firenze
Android Wear CodeLab - GDG Firenze
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
 
Introduction to Retrofit and RxJava
Introduction to Retrofit and RxJavaIntroduction to Retrofit and RxJava
Introduction to Retrofit and RxJava
 
Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
 
MVVM with DataBinding on android
MVVM with DataBinding on androidMVVM with DataBinding on android
MVVM with DataBinding on android
 

Similar to Clean android code - Droidcon Italiy 2014

Clean android code
Clean android codeClean android code
Clean android code
firenze-gtug
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
Giorgio Di Nardo
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
Daniel Londero
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
Alessandro Alpi
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
Marcello Teodori
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
Giorgio Di Nardo
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
Sergio Ronchi
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
Andrea Dottor
 
Sviluppare su OSGi con Camel e GWT
Sviluppare su OSGi con Camel e GWTSviluppare su OSGi con Camel e GWT
Sviluppare su OSGi con Camel e GWT
Cristiano Costantini
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinFabio Cozzolino
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
Massimo Groppelli
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
guestfb22d3
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
Massimo Groppelli
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
Nicola Del Gobbo
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
Dominopoint - Italian Lotus User Group
 

Similar to Clean android code - Droidcon Italiy 2014 (20)

Clean android code
Clean android codeClean android code
Clean android code
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
Struttin' on, novità in casa Struts
Struttin' on, novità in casa StrutsStruttin' on, novità in casa Struts
Struttin' on, novità in casa Struts
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Sviluppare su OSGi con Camel e GWT
Sviluppare su OSGi con Camel e GWTSviluppare su OSGi con Camel e GWT
Sviluppare su OSGi con Camel e GWT
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
Testing
TestingTesting
Testing
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 

More from Fabio Collini

Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
Fabio Collini
 
Using hilt in a modularized project
Using hilt in a modularized projectUsing hilt in a modularized project
Using hilt in a modularized project
Fabio Collini
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
Fabio Collini
 
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community confKotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
Fabio Collini
 
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere StockholmKotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Fabio Collini
 
Using Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture projectUsing Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture project
Fabio Collini
 
Solid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon ItalySolid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon Italy
Fabio Collini
 
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
SOLID principles in practice: the Clean Architecture - Devfest Emila RomagnaSOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
Fabio Collini
 
SOLID principles in practice: the Clean Architecture
SOLID principles in practice: the Clean ArchitectureSOLID principles in practice: the Clean Architecture
SOLID principles in practice: the Clean Architecture
Fabio Collini
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
Recap Google I/O 2018
Recap Google I/O 2018Recap Google I/O 2018
Recap Google I/O 2018
Fabio Collini
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italyFrom java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
Fabio Collini
 
From java to kotlin beyond alt+shift+cmd+k
From java to kotlin beyond alt+shift+cmd+kFrom java to kotlin beyond alt+shift+cmd+k
From java to kotlin beyond alt+shift+cmd+k
Fabio Collini
 
Testing Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UKTesting Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UK
Fabio Collini
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
Fabio Collini
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJava
Fabio Collini
 

More from Fabio Collini (17)

Architectures in the compose world
Architectures in the compose worldArchitectures in the compose world
Architectures in the compose world
 
Using hilt in a modularized project
Using hilt in a modularized projectUsing hilt in a modularized project
Using hilt in a modularized project
 
Managing parallelism using coroutines
Managing parallelism using coroutinesManaging parallelism using coroutines
Managing parallelism using coroutines
 
Kotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community confKotlin Delegates in practice - Kotlin community conf
Kotlin Delegates in practice - Kotlin community conf
 
Kotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere StockholmKotlin delegates in practice - Kotlin Everywhere Stockholm
Kotlin delegates in practice - Kotlin Everywhere Stockholm
 
Using Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture projectUsing Dagger in a Clean Architecture project
Using Dagger in a Clean Architecture project
 
Solid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon ItalySolid principles in practice the clean architecture - Droidcon Italy
Solid principles in practice the clean architecture - Droidcon Italy
 
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
SOLID principles in practice: the Clean Architecture - Devfest Emila RomagnaSOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
 
SOLID principles in practice: the Clean Architecture
SOLID principles in practice: the Clean ArchitectureSOLID principles in practice: the Clean Architecture
SOLID principles in practice: the Clean Architecture
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
 
Recap Google I/O 2018
Recap Google I/O 2018Recap Google I/O 2018
Recap Google I/O 2018
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italyFrom java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
 
From java to kotlin beyond alt+shift+cmd+k
From java to kotlin beyond alt+shift+cmd+kFrom java to kotlin beyond alt+shift+cmd+k
From java to kotlin beyond alt+shift+cmd+k
 
Testing Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UKTesting Android apps based on Dagger and RxJava Droidcon UK
Testing Android apps based on Dagger and RxJava Droidcon UK
 
Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2Intro to Retrofit 2 and RxJava2
Intro to Retrofit 2 and RxJava2
 
Testing Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJavaTesting Android apps based on Dagger and RxJava
Testing Android apps based on Dagger and RxJava
 

Clean android code - Droidcon Italiy 2014