En développement, nous avons parfois besoin d'exécuter une certaine tâche à un intervalle fixe. Par exemple, si les contrôles de l'interface utilisateur doivent changer au fil du temps, nous pouvons utiliser les classes d'outils de minuterie fournies par Java, à savoir Timer et TimerTask.
Timer est une classe ordinaire avec plusieurs méthodes importantes ; TimerTask est une classe abstraite avec une méthode abstraite run(), qui est similaire à la méthode run() dans les threads. Nous utilisons Timer pour créer son objet, puis utilisez la méthode de planification de cet objet pour terminer cette opération d'intervalle.
La méthode planning a trois paramètres
Le premier paramètre est un objet de type TimerTask. La méthode run() que nous implémentons TimerTask est une tâche à exécuter périodiquement
.
Le deuxième paramètre a deux types, le premier est de type long, indiquant le temps qu'il faudra pour démarrer l'exécution, et l'autre est de type Date, indiquant le temps qu'il faudra pour démarrer l'exécution
//true 说明这个timer以daemon方式运行(优先级低,程序结束timer也自动结束) java.util.Timer timer = new java.util.Timer(true); TimerTask task = new TimerTask() { public void run() { //每次需要执行的代码放到这里面。 } }; //以下是几种调度task的方法: //time为Date类型:在指定时间执行一次。 timer.schedule(task, time); //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。 timer.schedule(task, firstTime, period); //delay 为long类型:从现在起过delay毫秒执行一次。 timer.schedule(task, delay); //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。 timer.schedule(task, delay, period);
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import java.util.Timer; import java.util.TimerTask; public class TimerTaskActivity extends Activity { private Timer mTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // init timer mTimer = new Timer(); // start timer task setTimerTask(); } @Override protected void onDestroy() { super.onDestroy(); // cancel timer mTimer.cancel(); } private void setTimerTask() { mTimer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; doActionHandler.sendMessage(message); } }, 1000, 1000/* 表示1000毫秒之後,每隔1000毫秒執行一次 */); } /** * do some action */ private Handler doActionHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int msgId = msg.what; switch (msgId) { case 1: // do some action break; default: break; } } }; }