In der Entwicklung müssen wir manchmal eine bestimmte Aufgabe in einem festen Intervall ausführen. Wenn sich beispielsweise die Steuerelemente auf der Benutzeroberfläche im Laufe der Zeit ändern müssen, können wir die von Java bereitgestellten Timer-Tool-Klassen verwenden, nämlich Timer und TimerTask.
Timer ist eine gewöhnliche Klasse mit mehreren wichtigen Methoden. TimerTask ist eine abstrakte Klasse mit einer abstrakten Methode run(), die der run()-Methode in Threads ähnelt. Wir verwenden Timer. Verwenden Sie dann die Zeitplanmethode dieses Objekts, um diesen Intervallvorgang abzuschließen.
Die Schedule-Methode hat drei Parameter
Der erste Parameter ist ein Objekt vom Typ TimerTask. Die von uns implementierte run()-Methode ist eine regelmäßig auszuführende Aufgabe
//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; } } }; }