SlideShare una empresa de 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

Más contenido relacionado

Similar a Concorrência em Android

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
 

Similar a Concorrência em Android (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
 

Último

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Concorrência em Android

  • 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