Android定时器详解
引言
在开发Android应用程序时,经常需要实现定时器功能,用于定时执行某个任务或者更新UI界面。本文将介绍Android中常用的定时器类以及使用示例,帮助开发者快速掌握定时器的使用方法。
定时器类介绍
Android中常用的定时器类有CountDownTimer
和Timer
。
CountDownTimer类
CountDownTimer
是一个抽象类,用于实现倒计时功能。它提供了两个方法:onTick(long millisUntilFinished)
和onFinish()
。
onTick(long millisUntilFinished)
:每隔一段时间(由构造函数的参数指定)调用一次,参数millisUntilFinished
表示距离倒计时结束还剩余的时间。onFinish()
:倒计时结束时调用。
Timer类
Timer
是一个通用的定时器类,它可以用于实现各种任务的定时执行。它提供了两个核心方法:schedule(TimerTask task, long delay)
和scheduleAtFixedRate(TimerTask task, long delay, long period)
。
schedule(TimerTask task, long delay)
:在指定的延迟时间后执行一次任务。scheduleAtFixedRate(TimerTask task, long delay, long period)
:在指定的延迟时间后开始执行任务,并以指定的间隔时间重复执行。
CountDownTimer使用示例
下面是一个使用CountDownTimer
的示例代码:
import android.os.CountDownTimer;
public class MainActivity extends AppCompatActivity {
private TextView countdownText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countdownText = findViewById(R.id.countdown_text);
// 创建一个倒计时器,总时间为10秒,每隔1秒回调一次
CountDownTimer countDownTimer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 更新倒计时文本
countdownText.setText("倒计时:" + millisUntilFinished / 1000 + "秒");
}
@Override
public void onFinish() {
countdownText.setText("倒计时结束");
}
};
// 启动倒计时器
countDownTimer.start();
}
}
在上面的示例中,我们在onCreate()
方法中创建了一个CountDownTimer
对象,总时间设为10秒,每隔1秒回调一次。在onTick()
方法中更新了UI界面上的倒计时文本,onFinish()
方法在倒计时结束时被调用。
Timer使用示例
下面是一个使用Timer
的示例代码:
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
private TextView timerText;
private Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timerText = findViewById(R.id.timer_text);
// 创建一个定时器
timer = new Timer();
// 创建一个定时任务
TimerTask timerTask = new TimerTask() {
int count = 0;
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// 更新计时文本
timerText.setText("计时:" + count + "秒");
count++;
}
});
}
};
// 在延迟1秒后开始执行定时任务,每隔1秒重复执行
timer.scheduleAtFixedRate(timerTask, 1000, 1000);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消定时器
timer.cancel();
}
}
在上面的示例中,我们在onCreate()
方法中创建了一个Timer
对象,并在其中创建了一个定时任务TimerTask
。在定时任务的run()
方法中,通过runOnUiThread()
方法更新了UI界面上的计时文本。最后,我们通过scheduleAtFixedRate()
方法在延迟1秒后开始执行定时任务,并以1秒的间隔重复执行。在onDestroy()
方法中,我们取消了定时器。
类图
下面是CountDownTimer
和Timer
的类图:
classDiagram
class CountDownTimer {