在非ui线程中使用定时
时间: 2024-07-26 15:00:50 浏览: 102
在非UI线程中使用定时器通常是为了避免阻塞用户界面,因为Android应用程序的主要生命周期回调都在主线程中运行。如果你在主线程上执行耗时操作,如网络请求、数据库查询等,会导致UI冻结,用户体验变差。因此,当需要执行一些长时间运行的任务时,我们通常将其放在子线程(如AsyncTask、Handler、Thread或者RxJava等异步框架)中。
在Android中,你可以使用`CountDownTimer`或`ScheduledExecutorService`来创建一个定时任务。例如:
```java
// 使用CountDownTimer
CountDownTimer timer = new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 每隔一秒钟执行一次的操作,这里是子线程
runOnUiThread(new Runnable() {
@Override
public void run() {
updateProgress(millisUntilFinished);
}
});
}
@Override
public void onFinish() {
// 当计时结束时切换回主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
finishTask();
}
});
}
};
timer.start();
// 或者使用ScheduledExecutorService
ScheduledExecutorService executor = Executors.newSingleThreadExecutor();
executor.scheduleAtFixedRate(() -> {
// 子线程任务
performLongRunningTask();
}, 0, 1, TimeUnit.SECONDS);
```
阅读全文