PDA

Ver la Versión Completa : [ CONSULTA ] Ejecutar cada cierto tiempo


Marciano Verde
14/05/13, 14:02:03
¿como puedo hacer para que una función se ejecute cada cierto tiempo?
lo que quiero es que una vez por segundo se ejecute una función que me actualice unos textos. Ya he mirado por internet y parece que se puede hacer con Timer, pero no consigo que funcione, a ver si alguien me explica o me pone un ejemplo de como se puede hacer esto.

Dild0
14/05/13, 14:49:32
quiza se podria hacer algo asi.



private Handler h = new Handler();
private Runnable r;


r = new Runnable() {
@Override
public void run() {

h.postDelayed(this, 1000);

tufuncion();

}

};

para ejecutar
h.post(r);

para parar
h.removeCallbacks(r);

Dild0
14/05/13, 14:59:26
otra opción es implementarlo en una clase por si necesitas tener varios objetos a la vez llamando a la funcion y asi pouedes hacer un inicio fin en el onStop y en el OnPause para cuando cambias de actividad dejarlos muertos


public class repite {

private Handler h = new Handler();
private Runnable r;


public repite() {
super();
}

public repite() {
super();
repitefuncion();
}
public void inicio() {
h.post(r);
}
public void fin() {
h.removeCallbacks(r);
}

private void repitefuncion() {

r = new Runnable() {

@Override
public void run() {

h.postDelayed(this, 1000);
tufuncion();

}
};

}
}


Aunq no se si es la mejor manera yo soy muy novato

mocelet
14/05/13, 15:07:20
Yo también uso los Handler, es lo mejor para actualizar elementos de la interfaz de usuario porque ya estás en el hilo principal y evitas crear más hilos.

Marciano Verde
14/05/13, 16:43:10
quiza se podria hacer algo asi.



private Handler h = new Handler();
private Runnable r;


r = new Runnable() {
@Override
public void run() {

h.postDelayed(this, 1000);

tufuncion();

}

};

para ejecutar
h.post(r);

para parar
h.removeCallbacks(r);



Pero, esto ¿donde lo meto?, lo he intentado en el archivo MainActivity.java, dentro o a continuación del "protected void onCreate(Bundle savedInstanceState) {" y me da el error: "Cannot instantiate the type Handler".
Ya he pulsado CTRL+SHIFT+O para que añada algún import, pero parece que no van por ahí los tiros...
Por favor, ayuda.

Dild0
14/05/13, 18:16:53
declaraciones te las metes en la clase

private Handler h = new Handler();
private Runnable r;

el codigo donde tu quieras, en el oncreate en una funcion o donde quieras usarlo
r = new Runnable() {
@Override
public void run() {

h.postDelayed(this, 1000);

tufuncion();

}

};


Y la llamada como lo declaraste en la clase pues en cualquier parte que quieras hacer la ejecución, por ejemplo en el onResume y en el onStop

para ejecutar
h.post(r);

para parar
h.removeCallbacks(r);


Te lo digo asi a ojo no tengo aqui el java instalado sorry puede q cometa errores