PDA

Ver la Versión Completa : [ CONSULTA ] como arrancar y parar un hilo a traves de clicks


manolazo
31/05/13, 11:42:39
Buenas.

Tengo el siguiente hilo el cual invalida una view para mover por ejemplo un objeto en pantalla:


boolean running = true;

class Hilo extends Thread{
public void run(){
while(running){
postInvalidate();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}


Quiero que al pulsar la view mediantes click se arranque el hilo, si vuelvo a tocar la view se pare, si vuelvo a tocar se reanude, si vuelvo a tocar se parey asi sucesivamente:



vista.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (running){
hilo.start();
running=true;
}else{
hilo.interrupt();
}



Como se haria?
un saludo.

kriogeN
31/05/13, 13:52:19
Pues sería casi como lo tienes, pero creo que hay algunas cosas que están mal:

El estado inicial de la variable "running" debería ser "false"

Y en el segundo fragmento, en lugar de "if (running)" debería ser "if (!running)", y establecer "running=true" antes de "hilo.start()" y en el "else" puedes quitar el "hilo.interrupt()" y cambiarlo por "running=false"

manolazo
31/05/13, 14:59:43
Buenas.

Ya probe lo que dices pero no funciona. El primer click arranca el hilo, el segundo lo para, pero el tercero vuelve a arrancar el hilo lo cual provoca un error indicando que el hilo ya esta arrancado.

Creo que habria que hacer uso de hilo.interrupt() y hilo.resume() pero resume() esta obsoleto.
¿Alguna idea?

kriogeN
31/05/13, 15:20:58
Tienes que volver a crear el hilo, no puedes iniciar el mismo hilo 2 veces.

kriogeN
31/05/13, 15:23:26
Duplicado.

manolazo
31/05/13, 16:06:43
Hola.
No sabia que no se puede iniciar un hilo dos veces con el metodo resume().
Haciendo lo que comentas si funciona.

if(!running){
running=true;
hilo = new Hilo();
hilo.start();
}else{
running=false;
}

Gracias