Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Android Dev em 2017 - Desenvolvendo para milhõe...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Angelo Castelan
May 28, 2017
Programming
38
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android Dev em 2017 - Desenvolvendo para milhões de usuários
Palestra dada no I/O Extended Porto Alegre em 28/05/2017
Angelo Castelan
May 28, 2017
Other Decks in Programming
See All in Programming
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
440
Jetpack Compose Mechanisms
skydoves
3
820
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
160
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
Event is what happens
moro
2
860
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
320
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
The Cult of Friendly URLs
andyhume
79
7k
Rails Girls Zürich Keynote
gr2m
96
14k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Transcript
Android Dev em 2017 Desenvolvendo para milhões de usuários @castelanjr
None
POR QUE? ⭐⭐⭐⭐⭐
Código Limpo == Código Testável
MVC MVP MVVM
Model View Presenter • Model: entidades, repositórios e ações do
app • View: interface passiva que mostra os dados e chama o Presenter nos comandos do usuário • Presenter: controla o model e o apresenta na view
View Presenter Model Eventos do Usuário Atualiza Model Mudança de
estado Atualiza View
Model View ViewModel • Model: entidades, repositórios e ações do
app • View: a UI • ViewModel: uma abstração da View com propriedades e comandos • Data Binding: sincroniza View e ViewModel
View ViewModel Model DataBinding Atualiza Model Mudança de estado
Não existe a opção correta!
Unit Tests UI Tests
JUnit
Mockito
Robolectric
Espresso
Android Architecture Blueprints https://github.com/googlesamples/android-architecture
Operações Assíncronas
Callback Hell }); }); }); }); }); }); }); });
}); });
RxJava • Reactive Extensions para a JVM • Gerenciamento de
programas assíncronos e baseados em eventos usando sequências de Observables • Programação Funcional
RxJava uploader.uploadFile(file) .flatMap { data -> entryRepository.createEntry(data) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ entry -> showEntry(entry) }, { throwable -> Log.e(TAG, "Erro no upload", throwable) showErrorMessage() })
RxJava uploader.uploadFile(file) .flatMap { data -> entryRepository.createEntry(data) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ entry -> showEntry(entry) }, { throwable -> Log.e(TAG, "Erro no upload", throwable) showErrorMessage() })
RxJava uploader.uploadFile(file) .flatMap { data -> entryRepository.createEntry(data) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ entry -> showEntry(entry) }, { throwable -> Log.e(TAG, "Erro no upload", throwable) showErrorMessage() })
RxJava uploader.uploadFile(file) .flatMap { data -> entryRepository.createEntry(data) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ entry -> showEntry(entry) }, { throwable -> Log.e(TAG, "Erro no upload", throwable) showErrorMessage() })
RxJava uploader.uploadFile(file) .flatMap { data -> entryRepository.createEntry(data) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({ entry -> showEntry(entry) }, { throwable -> Log.e(TAG, "Erro no upload", throwable) showErrorMessage() })
A própria linguagem!
Kotlin • Moderna, divertida, madura, robusta • 100% interoperável com
Java • Funcional • Tipagem estática e null safe • Melhor linguagem de todas
Null Safety var nonNullString: String = "Striiiiing" nonNullString = null
// Não compila!
Null Safety val nullValue: String? = null nullValue.length // Não
compila!
Null Safety val nullValue: String? = null nullValue?.length //
Default Parameters fun sayHello(name: String = "Walter White") { println("Hello,
$name!") } sayHello("Donald Draper") sayHello()
Data Classes data class User(val id: Long, val username: String,
val name: String, val followers: Long, val following: Long)
Extension Functions fun String?.isNullOrEmpty(): Boolean { return this == null
|| this.isEmpty() } "".isNullOrEmpty()
Oficializada pelo Google!
Processo Constante
Obrigado! @castelanjr