Download - Concorrência em Android
![Page 2: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/2.jpg)
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
![Page 3: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/3.jpg)
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• …
![Page 4: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/4.jpg)
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
• …
![Page 5: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/5.jpg)
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)
![Page 6: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/6.jpg)
Android é um freak das threads!
![Page 7: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/7.jpg)
Show me moar !
• Multi-threading pode assumir várias formas:– Services– IntentService (Service com super
poderes)– AsyncTask– Handlers + Good old Threads– Daemon Threads
![Page 8: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/8.jpg)
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
![Page 9: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/9.jpg)
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
![Page 10: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/10.jpg)
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)
![Page 11: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/11.jpg)
AsyncTask – Exemplo Prático
![Page 12: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/12.jpg)
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)
![Page 13: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/13.jpg)
Threads!(Class)
![Page 14: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/14.jpg)
Workflow Threads
![Page 15: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/15.jpg)
Devia existir uma forma de lidar com este workflow
automaticamente! A Google não presta!
É por isso que Android blablabla…
![Page 16: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/16.jpg)
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()
![Page 17: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/17.jpg)
Threads e MainUI ThreadEntra 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!
![Page 18: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/18.jpg)
![Page 19: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/19.jpg)
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)
![Page 20: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/20.jpg)
HandlerPost-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
![Page 21: Concorrência em Android](https://reader036.vdocuments.pub/reader036/viewer/2022062320/55be22ebbb61ebd7028b4652/html5/thumbnails/21.jpg)
THEEND