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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
メールのエイリアス機能を履き違えない
isshinfunada
0
220
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
Google Apps Script で Ruby を動かす
kawahara
0
130
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
440
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
240
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
プロポーザルを書いてもらう
pvcresin
0
230
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
140
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
670
React本体のコードリーディング
high_g_engineer
1
140
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
240
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
Featured
See All Featured
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.5k
Everyday Curiosity
cassininazir
0
270
Faster Mobile Websites
deanohume
310
32k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
250
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Building an army of robots
kneath
306
46k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Are puppies a ranking factor?
jonoalderson
1
3.8k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
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(...)