SlideShare uma empresa Scribd logo
1 de 21
Concorrência em
     Android




      Por Pedro Veloso
 pedro.n.veloso@gmail.com
Google + : http://goo.gl/yS2sE
Concorrência
“Concorrência ocorre quando existem dois processos executados em simultâneo; mais especificamente,
    o termo é utilizado quando esses dois processos disputam o acesso a recursos partilhados.”



Fonte: Wikipédia :P
Multi-Threading
Uma Thread é uma pequena unidade de processamento que corre como sendo parte
de um processo mas concorrente ao processamento principal deste.
Vantagens do seu uso :

• Assíncronia
• Não bloqueantes
• Aceleração de Processamento
•…
Para que é que isto me serve?!
• Evitar ANR!
• Ser um bom cidadão
     – O dispositivo é do utilizador, não do programador!
• Fazer aplicações ricas em usabilidade e interactividade
• …
Android
         “Debaixo do chassis”
• Bionic e Pthread (Baseado em partes de BSD,
  Linux e Jedi Mind Tricks)
• Live together – happy family :)
• VM por Aplicação
• Cada componente high-level é um processo
  novo
• Dentro de cada processo existem vários sub-
  processos (Main UI Thread sendo o +
  importante)
Android é um freak das threads!
Show me moar !
• Multi-threading pode assumir várias formas:
     – Services
     – IntentService (Service com super poderes)
     – AsyncTask
     – Handlers + Good old Threads
     – Daemon Threads
Services
• Correm em plano de fundo
• Têm o mesmo tipo de callbacks e lifecycle semelhante a uma Activity
• Útil para acções prolongadas e que devem (podem) exceder o tempo de vida de uma Activity
IntentService
•   Derivação especial de Service, que a cada novo Intent cria uma worker thread para execução
•   Pedidos são processados em formato Queue (para os esquecidos – FIFO)
•   Pára automaticamente quando já não tem mais pedidos a processar
•   Útil para quando existe necessidade de executar várias tarefas fora da Activity em que a abstracção de
    Queue faça sentido
AsyncTask
• Class única de Android que permite abstrair a complexidade de trabalhar com Threads
• Tem de ser invocada a partir da Main UI Thread directamente
• A tarefa só executa uma vez (mas podemos encadear execuções separadas em série)
AsyncTask – Exemplo Prático
AsyncTasks
• Uma instância de AsyncTask apenas pode ser criada na Thread UI principal
• Uma tarefa pode ser lançada desta forma: new [NomeDaClass
  AsyncTask].execute( [parâmetros] )
• A tarefa pode ser cancelada com o método cancel() , o qual
  chamará o callback onCancelled(Object)
  (doInBackground vai correr na mesma)
Threads!
 (Class)
Workflow Threads
Devia existir uma forma de lidar com este workflow automaticamente! A Google
                                   não presta!
                      É por isso que Android blablabla…
Daemon Threads!

• reproMusica.setDaemon(True)

• A Thread é automaticamente parada assim que a Thread principal da aplicação morre
• Deve-se fazer esta declaração antes do método start()
Threads e MainUI Thread
                                   Entra o Handler!
• Em Android a forma típica de comunicação entre Threads é feita recorrendo à classe Handler
• Geralmente mantêm-se a scope dum objeto deste tipo a nível
  Global, e enviam-se mensagem para o mesmo, as
  quais são processadas respeitando a ordem da
  Queue
• Cada Handler está associado a uma única Thread, e essa Thread rege-se pela Queue definida
• No onStop() deve-se limpar a Queue do Handler manualmente!
Handlers, Handlers, Handlers…
•   sendEmptyMessageDelayed(int what, long delayMillis)
•   sendMessageAtFrontOfQueue(Message msg)
•   sendMessageAtTime(Message msg, long uptimeMillis)
•   post(Runnable r) : Um runnable é adicionado à queue
•   postDelayed(Runnable r, long delayMillis)
Handler
                                                                     Post-Runnable Exemplo




Pontos a reter:
• Handlers são Single Threaded
• Particularmente úteis para tarefas de inicialização, onde a estrutura de Queue faz sentido
• Forma prática de comunicar com a UI Thread
THE
END

Mais conteúdo relacionado

Semelhante a Concorrência em Android: Threads, Handlers, Services e AsyncTasks

Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémLocaweb
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepLoiane Groner
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...rafaelov
 
SD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfSD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfFerro Gaita
 
Processos threads senai
Processos threads senaiProcessos threads senai
Processos threads senaiCarlos Melo
 
Sistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaSistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaAdriano Teixeira de Souza
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoAdriano Teixeira de Souza
 
Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Intel Software Brasil
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoFrederico Madeira
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threadsSilvino Neto
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Intel Software Brasil
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 

Semelhante a Concorrência em Android: Threads, Handlers, Services e AsyncTasks (20)

Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e Além
 
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleepCurso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
 
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
 
SD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfSD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdf
 
Processos threads senai
Processos threads senaiProcessos threads senai
Processos threads senai
 
Threads
ThreadsThreads
Threads
 
Sistemas operacionais - aula8
Sistemas operacionais - aula8Sistemas operacionais - aula8
Sistemas operacionais - aula8
 
Sistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação ParalelaSistemas Distribuídos - Computação Paralela
Sistemas Distribuídos - Computação Paralela
 
Sistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - IntroduçãoSistemas Distribuídos - Computação Paralela - Introdução
Sistemas Distribuídos - Computação Paralela - Introdução
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 
Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!Computação Manycore: Uma Arquitetura muito além do Multicore!
Computação Manycore: Uma Arquitetura muito além do Multicore!
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
Java 13
Java 13Java 13
Java 13
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Node js
Node jsNode js
Node js
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
04 threads
04 threads04 threads
04 threads
 
Servidores de Aplicações
Servidores de AplicaçõesServidores de Aplicações
Servidores de Aplicações
 

Concorrência em Android: Threads, Handlers, Services e AsyncTasks

  • 1. Concorrência em Android Por Pedro Veloso pedro.n.veloso@gmail.com Google + : http://goo.gl/yS2sE
  • 2. Concorrência “Concorrência ocorre quando existem dois processos executados em simultâneo; mais especificamente, o termo é utilizado quando esses dois processos disputam o acesso a recursos partilhados.” Fonte: Wikipédia :P
  • 3. Multi-Threading Uma Thread é uma pequena unidade de processamento que corre como sendo parte de um processo mas concorrente ao processamento principal deste. Vantagens do seu uso : • Assíncronia • Não bloqueantes • Aceleração de Processamento •…
  • 4. Para que é que isto me serve?! • Evitar ANR! • Ser um bom cidadão – O dispositivo é do utilizador, não do programador! • Fazer aplicações ricas em usabilidade e interactividade • …
  • 5. Android “Debaixo do chassis” • Bionic e Pthread (Baseado em partes de BSD, Linux e Jedi Mind Tricks) • Live together – happy family :) • VM por Aplicação • Cada componente high-level é um processo novo • Dentro de cada processo existem vários sub- processos (Main UI Thread sendo o + importante)
  • 6. Android é um freak das threads!
  • 7. Show me moar ! • Multi-threading pode assumir várias formas: – Services – IntentService (Service com super poderes) – AsyncTask – Handlers + Good old Threads – Daemon Threads
  • 8. Services • Correm em plano de fundo • Têm o mesmo tipo de callbacks e lifecycle semelhante a uma Activity • Útil para acções prolongadas e que devem (podem) exceder o tempo de vida de uma Activity
  • 9. IntentService • Derivação especial de Service, que a cada novo Intent cria uma worker thread para execução • Pedidos são processados em formato Queue (para os esquecidos – FIFO) • Pára automaticamente quando já não tem mais pedidos a processar • Útil para quando existe necessidade de executar várias tarefas fora da Activity em que a abstracção de Queue faça sentido
  • 10. AsyncTask • Class única de Android que permite abstrair a complexidade de trabalhar com Threads • Tem de ser invocada a partir da Main UI Thread directamente • A tarefa só executa uma vez (mas podemos encadear execuções separadas em série)
  • 12. AsyncTasks • Uma instância de AsyncTask apenas pode ser criada na Thread UI principal • Uma tarefa pode ser lançada desta forma: new [NomeDaClass AsyncTask].execute( [parâmetros] ) • A tarefa pode ser cancelada com o método cancel() , o qual chamará o callback onCancelled(Object) (doInBackground vai correr na mesma)
  • 15. Devia existir uma forma de lidar com este workflow automaticamente! A Google não presta! É por isso que Android blablabla…
  • 16. Daemon Threads! • reproMusica.setDaemon(True) • A Thread é automaticamente parada assim que a Thread principal da aplicação morre • Deve-se fazer esta declaração antes do método start()
  • 17. Threads e MainUI Thread Entra o Handler! • Em Android a forma típica de comunicação entre Threads é feita recorrendo à classe Handler • Geralmente mantêm-se a scope dum objeto deste tipo a nível Global, e enviam-se mensagem para o mesmo, as quais são processadas respeitando a ordem da Queue • Cada Handler está associado a uma única Thread, e essa Thread rege-se pela Queue definida • No onStop() deve-se limpar a Queue do Handler manualmente!
  • 18.
  • 19. Handlers, Handlers, Handlers… • sendEmptyMessageDelayed(int what, long delayMillis) • sendMessageAtFrontOfQueue(Message msg) • sendMessageAtTime(Message msg, long uptimeMillis) • post(Runnable r) : Um runnable é adicionado à queue • postDelayed(Runnable r, long delayMillis)
  • 20. Handler Post-Runnable Exemplo Pontos a reter: • Handlers são Single Threaded • Particularmente úteis para tarefas de inicialização, onde a estrutura de Queue faz sentido • Forma prática de comunicar com a UI Thread