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
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
400
A corrida do ouro da App Store @ Mobile Day
rodrigorgs
0
620
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
330
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
240
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
150
Heart of Swift Concurrency
koher
0
1.1k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
220
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
280
SREの越境 / SRE Collaboration
y0hgi
2
290
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
110
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
160
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
560
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
440
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Producing Creativity
orderedlist
PRO
348
41k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
770
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
840
Navigating Weather and Climate Data
rabernat
0
540
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Music & Morning Musume
bryan
48
7.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Design in an AI World
tapps
1
340
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(...)