domingo, 14 de julho de 2013

Sincronizando ciclos de vida de uma work thread e da activity

 Para comemorar o aniversário do Blog Agorandroid, como um presente especial para os leitores, segue um exemplo de código que uso em algumas situações.
 Muitas vezes temos a necessidade de executar uma tarefa em segundo plano de uma forma contínua, ficando em loop enquanto uma activity esteja sendo executada. Mas, com uma característica adicional: desejamos sincronizar o ciclo de vida da tarefa com o ciclo de vida da activity.
 Para isso vamos definir uma classe MyTask que implementa a interface Runnable, e usar dois loops aninhados para controlar o ciclo de vida da tarefa. No loop externo, vamos usar a característica blocante da queue com bloqueio para aguardar/liberar a execução do serviço no loop interno.
 Implementamos os seguintes métodos do ciclo de vida da tarefa:
 -resume() - para (re)iniciar a tarefa;
 -pause() - para encerrar o loop interno;
 -stop() - para encerrar a tarefa;
 E os métodos auxiliares para setar/checar o status da tarefa: setStatus() e isRunning().
 O método doSomething() representa o serviço a ser executado pela tarefa, no caso, apenas incrementamos um contador e usamos o handler para atualizar a tela.

 Na activity, implementamos os seguintes métodos:
 -onCreate - instanciamos o textView e o button, e colocamos código para pausar/reiniciar a contagem da tarefa;
 -onStart - instanciamos a tarefa, a thread e startamos a thread;
 -onResume - chamamos o método resume da tarefa;
 -onPause - chamamos o método pause da tarefa;
 -onStop - chamamos o método stop da tarefa e esperamos a finalização da thread.

 Notem que o objetivo é manter a tarefa ativa somente quando a activity estiver no status "resumed".

 Seguem os códigos:

main.xml


TesteThread5Activity.class


O código está cheio de Log´s para podermos acompanhar a execução dos métodos.

Vejam um teste que executei:



Espero que gostem,

 Abraços

Aniversário do Blog

O blog está completando 2 anos hoje.
Parabéns a todos os leitores que tem visitado os meus posts.
Renovo agora o que disse há dois anos:
Seja muito bem vindo ao “Agorandroid”!

sábado, 6 de julho de 2013

Quanto tempo demora para aprender programação de computadores?

  Estive pensando sobre o tema após ler sobre a opinião do Peter Norvig sobre o assunto.
  Resumindo, Norvig diz que precisa de 10 anos ou 10.000 horas de dedicação.
  Para quem desejar ler o artigo acesse aqui: http://www.norvig.com/21-days.html
  Concordo com a opinião dele. Quem sou eu para discordar do cara??? Heheheh!!!
  Na verdade, concordo plenamente, ele está se referindo ao programador de software básico, aquele que desenvolve sistemas operacionais, compiladores, algoritmos de AI, etc.
  Mas, e os programadores de sistemas ditos "comerciais", precisam do mesmo tempo?
  Se considerarmos os quatro ou cinco anos de graduação, estágio, trainee, junior, pleno e senior deve dar os dez anos!
  Um detalhe importante: conta muito o quanto você se dedica em praticar/estudar fora do seu trabalho normal.
  Outro detalhe, nada substitui o estudar/testar/praticar/medir, neste nível o "achômetro" tem muito pouco espaço!
  Então, se você está começando agora, esteja preparado pelos próximos dez anos!

Abraços