Cocorrência em Android
Upcoming SlideShare
Loading in...5
×
 

Cocorrência em Android

on

  • 461 views

Slides apresentados no DevFest Portugal 2013. Tema: Concorrência em Android

Slides apresentados no DevFest Portugal 2013. Tema: Concorrência em Android

Statistics

Views

Total Views
461
Views on SlideShare
461
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Cocorrência em Android Cocorrência em Android Presentation Transcript

  • Concorrência em Android Por Pedro Veloso pedro.n.veloso@gmail.comGoogle + : 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-ThreadingUma Thread é uma pequena unidade de processamento que corre como sendo partede 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 ExemploPontos 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
  • THEEND