Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android Dev em 2017 - Desenvolvendo para milhõe...
Search
Angelo Castelan
May 28, 2017
Programming
0
29
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
Tweet
Share
Other Decks in Programming
See All in Programming
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
140
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
CSC307 Lecture 10
javiergs
PRO
1
660
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
330
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.7k
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
140
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
527
40k
A better future with KSS
kneath
240
18k
Code Review Best Practice
trishagee
74
20k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
Believing is Seeing
oripsolob
1
58
First, design no harm
axbom
PRO
2
1.1k
Building AI with AI
inesmontani
PRO
1
710
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.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