android线程倒计时, postDelayed 倒计时卡顿
时间: 2023-10-01 14:07:50 浏览: 148
在 Android 中使用 postDelayed 进行倒计时时,如果倒计时的时间很长,可能会出现卡顿现象。这是由于 postDelayed 是将消息放入消息队列中,等待一定时间后才会执行,而在执行之前可能会有其他的 UI 操作占用 CPU 资源,导致卡顿。
为了避免这种情况,可以使用 Android 提供的 Timer 和 TimerTask 类来实现倒计时。这两个类可以在后台线程中执行,不会阻塞主线程。具体实现方法如下:
1. 创建一个 Timer 对象和一个 TimerTask 对象:
```
private Timer mTimer;
private TimerTask mTimerTask;
```
2. 创建一个 Handler 对象:
```
private Handler mHandler = new Handler();
```
3. 在需要倒计时的地方,启动 Timer 和 TimerTask:
```
mTimer = new Timer();
mTimerTask = new TimerTask() {
int count = 10;
@Override
public void run() {
count--;
mHandler.post(new Runnable() {
@Override
public void run() {
// 更新 UI
mTextView.setText(String.valueOf(count));
}
});
if (count == 0) {
// 停止倒计时
mTimer.cancel();
mTimerTask.cancel();
}
}
};
mTimer.schedule(mTimerTask, 0, 1000);
```
在上面的代码中,Timer 和 TimerTask 的作用是每隔一秒钟执行一次 run 方法,更新 UI 中的倒计时。使用 mHandler.post 方法将更新 UI 的操作放到主线程中执行,避免卡顿现象。
需要注意的是,Timer 和 TimerTask 是在后台线程中执行的,如果需要更新 UI,必须使用 mHandler.post 方法将更新 UI 的操作放到主线程中执行。
阅读全文