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
Multithreading (Android SDK)
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
rodrigorgs
October 10, 2012
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Multithreading (Android SDK)
rodrigorgs
October 10, 2012
More Decks by rodrigorgs
See All by rodrigorgs
GuideAutomator: Continuous Delivery of End User Documentation
rodrigorgs
0
270
Sentiment analysis of Travis CI builds
rodrigorgs
1
1.2k
Indigente: desenvolvimento de jogos na UFBA
rodrigorgs
0
210
Inappropriate Software Changes: Rejection and Rework (Tese de Doutorado)
rodrigorgs
0
340
Move fast and break things? Uma análise sobre a adoção de releases rápidas no projeto Firefox
rodrigorgs
0
77
Do Rapid Releases Affect Bug Reopening? A Case Study of Firefox
rodrigorgs
0
560
Mergulhando nos dados abertos com R
rodrigorgs
1
110
Minicurso de iOS @ Mobile Day
rodrigorgs
0
380
A corrida do ouro da App Store @ Mobile Day
rodrigorgs
0
580
Other Decks in Programming
See All in Programming
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.5k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
390
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
580
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
200
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
AI 輔助遺留系統現代化的經驗分享
jame2408
1
970
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
740
The NotImplementedError Problem in Ruby
koic
1
920
Agentic UI
manfredsteyer
PRO
0
190
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7.8k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Why Our Code Smells
bkeepers
PRO
340
58k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
240
Code Review Best Practice
trishagee
74
20k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Transcript
MATC89: Aplicações para Dispositivos Móveis Universidade Federal da Bahia (UFBA)
Rodrigo Rocha e Christina von Flach 2012.2 Multithreading Android SDK
1. Problema 2. Solução 3. AsyncTask 4. Desempenho
Problema
Problema • Seu código roda na thread principal, ou thread
de UI
Problema • Seu código roda na thread principal, ou thread
de UI • Enquanto seu código está executando, a interface congela
Problema • Seu código roda na thread principal, ou thread
de UI • Enquanto seu código está executando, a interface congela • Se demora até 100 ms, ok. Mais do que isso o usuário percebe
Problema • Seu código roda na thread principal, ou thread
de UI • Enquanto seu código está executando, a interface congela • Se demora até 100 ms, ok. Mais do que isso o usuário percebe • Se demora mais de 5 segundos, o Android fecha seu app!
Problema
Problema
Problema • Operações tipicamente demoradas
Problema • Operações tipicamente demoradas • Acesso a rede
Problema • Operações tipicamente demoradas • Acesso a rede •
Acesso a disco (dependendo do volume de dados)
Problema • Operações tipicamente demoradas • Acesso a rede •
Acesso a disco (dependendo do volume de dados) • Cálculos complexos (ex.: manipulação de imagem e vídeo)
1. Problema 2. Solução 3. AsyncTask 4. Desempenho
Solução • Solução: execute a operação demorada em uma nova
thread • O sistema alterna entre executar a thread da tarefa e executar a thread de UI
Solução • Operações demoradas devem rodar em uma thread separada
• Operações de UI devem rodar na thread de UI
Solução • Operação demorada (na nova thread) • Atualizar UI
com o resultado (na thread principal)
Solução • O ideal é quebrar essas operações de forma
a executar um pedaço pequeno de cada vez. • Ao final de cada pedaço, atualiza a UI para avançar uma barra de progresso
Solução
Solução • Operação demorada parte 1/3 • Atualizar UI (progresso
= 33%) • Operação demorada parte 2/3 • Atualizar UI (progresso = 66%) • Operação demorada parte 3/3 • Atualizar UI (progresso = 100%) • Atualizar UI (resultado)
1. Problema 2. Solução 3. AsyncTask 4. Desempenho
AsyncTask
private class MyTask extends AsyncTask<Params, Progress, Result> { protected void
onPreExecute() { ... } protected Result doInBackground(Params... params) { .. } protected void onProgressUpdate(Progress... values) { ... } protected void onPostExecute(Result result) { ... } } AsyncTask Troque Params, Progress, Result por classes Java (String, Integer ou sua própria classe)
onPreExecute() onProgressUpdate() onPostExecute() doInBackground() thread principal (UI) nova thread AsyncTask
1. Problema 2. Solução 3. AsyncTask 4. Desempenho etc.
Desempenho
Desempenho • Cada vez que atualiza a UI, há uma
troca de contexto.
Desempenho • Cada vez que atualiza a UI, há uma
troca de contexto. • Trocas de contexto são lentas.
Desempenho • Cada vez que atualiza a UI, há uma
troca de contexto. • Trocas de contexto são lentas. • Se atualiza UI com frequência, o usuário tem feedback rápido, mas a operação demora mais.
Cancelamento • ProgressDialog.setOnCancelListener: • cancel(true) • AsyncTask.doInBackground(): • if (isCancelled())
... • AsyncTask.onCancelled(...)