Essa classe "Runnable". O que é, o que ela faz?

6 respostas
L

Povo, minha experiência no Android é quase zero. Alguém me explica o que esse código faz? É uma thread esse Runnable?? Se for, como eu faço pra parar ele imediatamente quando eu precisar?

Abraços à todos e qualquer ajuda será bem vinda,

6 Respostas

rafadelnero

Runnable é uma interface.

No seu caso, está sendo criada uma classe interna anônima que implementa a interface Runnable e já declarando diretamente seu método run que faz a Thread ser iniciada!

boardView.post(new Runnable(){ public void run(){ boardView.invalidate(); } });

Essa minha explicação foi do Java Core, mas tenho quase certeza que vale pra Android também.

L

rafadelnero:
Runnable é uma interface.

No seu caso, está sendo criada uma classe interna anônima que implementa a interface Runnable e já declarando diretamente seu método run que faz a Thread ser iniciada!

boardView.post(new Runnable(){ public void run(){ boardView.invalidate(); } });

Essa minha explicação foi do Java Core, mas tenho quase certeza que vale pra Android também.

Valeu Rafael. Cara, existe algum meio de eu pegar o id dessa thread pra eu poder parar ou até destruir ela quando eu precisar?

Abraços,

A

Olá
Runnable descrevem tarefas, no caso, está colocando uma tarefa para ser executada na UI thread, pelo método post do objeto view.
A sua tarefa só tem um comando, se fosse uma série de comandos você teria que ter checagens de chaves ou outros mecanismos para interromper a tarefa. Normalmente se usa isso numa estrutura de controle de loop.
A classe Thread implementa a interface Runnable.
Mas, no caso, você não está iniciando uma nova thread, e sim, colocando uma tarefa para ser executada numa thread já iniciada.
A thread que está rodando essa tarefa é a main thread, se destruir vai encerrar a aplicação!

Abraço

L

Olá amigos Rafael/Gusukuma, o meu problema eu acredito que seja bobo de resolver. O que eu estou fazendo também não é tão útil, é só um joguinho da velha pra minha filha e a minha sobrinha brincarem online com as coleguinhas, melhor do que introduzir Facebook a uma criança de 7 e uma pré-adolescente de 12 não concordam. O jogo eu peguei do seguinte turorial;

http://www.ibm.com/developerworks/br/library/x-androidtictactoe/index.html

O meu problema é o seguinte, quando eu do lado de cá marco a minha jogada(X ou O) a jogada que eu marquei pisca, a aplicação cria um TimerTask que fica atualizando a tela do jogo periodicamente, acontece que quando eu faço a jogada, esse TimerTask na classe UpdateTimer atualiza a tela antes de ser gravada a jogada no banco, aí a jogada apaga e só marca denovo quando atualiza denovo trazendo do banco, sei que parece besteira mas isso estraga totalmente a estética do jogo e também pode induzir os usuários a cometerem erros pensando que aquele quadro ali não foi marcado. E não tô conseguindo achar solução…

Rapaziada, agradeço a ajuda até aqui e qualquer ajuda é bem vinda,
[]'s.

A

Olá
Infelizmente não é tão simples, o próprio autor listou vários tópicos para implementar.
Eu dei uma olhada superficial no projeto.
A classe GameService precisaria ser implementada para acesso concorrente, já que é acessada por mais de uma thread.
Além disso, ela está com a matriz positions definida como public e justamente essa matriz que precisa ser protegida de acesso concorrente.
Talvez a estratégia do Timer/TimerTask devesse ser revista para recomeçar a contagem após o movimento.
Em resumo, tem muita coisa para fazer!
Abraço

Marky.Vasconcelos

Runnable é apenas uma interface com o método run() para ser implementado.

A ideia é que ele é um objeto que vai ser “rodado” em algum ponto e em alguma thread (ver programação paralela com Java).

No caso do Android, o método post das views vão enfileirar o Runnable para ser executado na MainThread quando disponivel.

Criado 12 de janeiro de 2013
Ultima resposta 14 de jan. de 2013
Respostas 6
Participantes 4