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
rodrigorgs
October 10, 2012
Programming
220
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
350
Move fast and break things? Uma análise sobre a adoção de releases rápidas no projeto Firefox
rodrigorgs
0
78
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
390
A corrida do ouro da App Store @ Mobile Day
rodrigorgs
0
600
Other Decks in Programming
See All in Programming
Press start. Python's next generation.
willingc
PRO
3
300
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
640
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
120
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
高専キャリア LT 発表内容
crysta1221
6
5.4k
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
190
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
52
33k
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
自分的「カンファレンスの楽しみ方」
syumai
0
170
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
400
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
130
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
270
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
680
Balancing Empowerment & Direction
lara
6
1.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Accessibility Awareness
sabderemane
1
190
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
370
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
How GitHub (no longer) Works
holman
316
150k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
590
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
510
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
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(...)