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.
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);
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.
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
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.