Android 销毁 CountDownTimer
介绍
在 Android 开发中,经常会有倒计时的需求,比如验证码倒计时、游戏倒计时等。Android 提供了 CountDownTimer 类来实现倒计时功能。然而,在某些情况下,我们需要在 Activity 或 Fragment 销毁时停止计时器,以避免内存泄漏。本文将介绍如何在销毁时正确处理 CountDownTimer。
CountDownTimer 简介
CountDownTimer 是 Android 提供的一个抽象类,用于实现倒计时功能。它有两个主要方法:onTick()
和 onFinish()
。onTick()
方法在每个时间间隔内被调用,onFinish()
方法在倒计时结束时被调用。
以下是一个简单的 CountDownTimer 示例:
CountDownTimer countDownTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
// 每秒执行一次
textView.setText("倒计时:" + millisUntilFinished / 1000);
}
public void onFinish() {
// 倒计时结束
textView.setText("倒计时结束");
}
}.start();
上述代码创建了一个 30 秒的倒计时,每秒钟更新一次 TextView。
销毁 CountDownTimer
当 Activity 或 Fragment 销毁时,需要停止 CountDownTimer,以避免内存泄漏。我们可以在 Activity 或 Fragment 的 onDestroy()
方法中调用 cancel()
方法来停止计时器。
以下是一个示例:
public class MyActivity extends AppCompatActivity {
private CountDownTimer countDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
countDownTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
textView.setText("倒计时:" + millisUntilFinished / 1000);
}
public void onFinish() {
textView.setText("倒计时结束");
}
}.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
countDownTimer.cancel();
}
}
在上述示例中,我们在 onDestroy()
方法中调用了 cancel()
方法来停止计时器。这样,在 Activity 销毁时,CountDownTimer 也会被销毁,不会造成内存泄漏。
状态图
下面是 CountDownTimer 的状态图:
stateDiagram
[*] --> Created
Created --> Running : Start
Running --> Paused : Pause
Running --> Finished : Countdown finished
Paused --> Running : Resume
Paused --> Finished : Countdown finished
Finished --> [*] : Reset
在状态图中,CountDownTimer 有以下几种状态:
- Created:已创建但未启动
- Running:正在运行中
- Paused:已暂停
- Finished:倒计时结束
甘特图
下面是一个展示 CountDownTimer 运行时的甘特图示例:
gantt
dateFormat HH:mm:ss
axisFormat %H:%M:%S
section 倒计时
倒计时开始 : 00:00:00, 5s
倒计时中 : 00:00:05, 10s
倒计时结束 : 00:00:15, 0s
在甘特图中,展示了一个倒计时开始后经过 5 秒进入倒计时中状态,然后再经过 10 秒进入倒计时结束状态。
总结
CountDownTimer 是 Android 中实现倒计时功能的重要类。在销毁 Activity 或 Fragment 时,我们应该调用 cancel()
方法来停止计时器,以避免内存泄漏。本文介绍了如何正确销毁 CountDownTimer,并提供了状态图和甘特图示例。
希望本文能够帮助你正确处理 CountDownTimer,在开发过程中更加高效地使用倒计时功能。