Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multithreading (Android SDK)

rodrigorgs
October 10, 2012

Multithreading (Android SDK)

rodrigorgs

October 10, 2012
Tweet

More Decks by rodrigorgs

Other Decks in Programming

Transcript

  1. MATC89: Aplicações para Dispositivos Móveis Universidade Federal da Bahia (UFBA)

    Rodrigo Rocha e Christina von Flach 2012.2 Multithreading Android SDK
  2. Problema • Seu código roda na thread principal, ou thread

    de UI • Enquanto seu código está executando, a interface congela
  3. 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
  4. 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!
  5. Problema • Operações tipicamente demoradas • Acesso a rede •

    Acesso a disco (dependendo do volume de dados)
  6. 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)
  7. 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
  8. Solução • Operações demoradas devem rodar em uma thread separada

    • Operações de UI devem rodar na thread de UI
  9. 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
  10. 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)
  11. 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)
  12. Desempenho • Cada vez que atualiza a UI, há uma

    troca de contexto. • Trocas de contexto são lentas.
  13. 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.