In development, we sometimes have the need to perform a certain task at a fixed interval. For example, if the controls on the UI need to change over time, we can use the timer tool classes provided by Java, namely Timer and TimerTask.
Timer is an ordinary class with several important methods; while TimerTask is an abstract class with an abstract method run(), which is similar to the run() method in threads. We use Timer Create an object of his, and then use the schedule method of this object to complete this interval operation.
The schedule method has three parameters
The first parameter is an object of type TimerTask. The run() method we implement TimerTask is a task to be executed periodically;
The second parameter has two types, the first is long type, indicating how long it will take to start execution, and the other is Date type, indicating how long it will take to start execution;
The third parameter is the execution cycle, which is of long type.
The schedule method also has an execution overload with two parameters. The first parameter is still a TimerTask, and the second parameter is expressed as a long to indicate how long it will take to execute it. If it is Date, it indicates a certain time. Executed once.
Timer is a thread. Use the schedule method to complete the scheduling of TimerTask. Multiple TimerTask can share a Timer. That is to say, the Timer object calls the schedule method once to create a thread, and after calling the schedule once, the TimerTask is If the loop continues indefinitely, use Timer's cancel() to stop the operation. Of course, after the same Timer executes the cancel() method once, all Timer threads will be terminated.
Usage
//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);
Sample code:
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; } } }; }
The above is the entire content of this article. I hope it will be helpful to everyone's learning, and I also hope that everyone will join the PHP Chinese website.
For more articles that analyze the usage and examples of Timer and TimerTask in Java in Android, please pay attention to the PHP Chinese website!