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

Multithreading (Android SDK)

Avatar for rodrigorgs rodrigorgs
October 10, 2012

Multithreading (Android SDK)

Avatar for rodrigorgs

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.