Sí, se puede usar el temporizador de Java , pero como la pregunta pide una mejor manera (para dispositivos móviles). Lo cual se explica aquí .
Por el bien de StackOverflow:
Como Timer crea un nuevo hilo, puede considerarse pesado,
si todo lo que necesita es conseguir es una llamada de vuelta, mientras que la actividad se está ejecutando un manejador puede ser usado en conjunción con una
Ejecutable :
private final int interval = 1000; // 1 Second
private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
public void run() {
Toast.makeText(MyActivity.this, "C'Mom no hands!", Toast.LENGTH_SHORT).show();
}
};
...
handler.postAtTime(runnable, System.currentTimeMillis()+interval);
handler.postDelayed(runnable, interval);
o un mensaje
private final int EVENT1 = 1;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case Event1:
Toast.makeText(MyActivity.this, "Event 1", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(MyActivity.this, "Unhandled", Toast.LENGTH_SHORT).show();
break;
}
}
};
...
Message msg = handler.obtainMessage(EVENT1);
handler.sendMessageAtTime(msg, System.currentTimeMillis()+interval);
handler.sendMessageDelayed(msg, interval);
en una nota al margen, este enfoque se puede usar, si desea ejecutar un fragmento de código en el hilo de la interfaz de usuario desde otro hilo.
si necesita que le devuelvan la llamada incluso si su actividad no se está ejecutando, puede usar un AlarmManager