Android定时器详解

引言

在开发Android应用程序时,经常需要实现定时器功能,用于定时执行某个任务或者更新UI界面。本文将介绍Android中常用的定时器类以及使用示例,帮助开发者快速掌握定时器的使用方法。

定时器类介绍

Android中常用的定时器类有CountDownTimerTimer

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()方法中,我们取消了定时器。

类图

下面是CountDownTimerTimer的类图:

classDiagram
    class CountDownTimer {