Java Android-每单位时间执行一次操作
这与其说是无能,不如说是无知。我正在尝试构建一个计时器应用程序,但是发现CountDownTimer对象对于我来说太不准确了。因此,我想手动创建计时器,只需在每个时间单位上打勾并对每个打勾执行某种操作(无需倒计时,因为我将手动处理此操作)-是否有内置对象来执行此操作(除了倒计时),或者我必须使用线程/休眠吗?使用Java Android-每单位时间执行一次操作,java,android,timer,Java,Android,Timer,这与其说是无能,不如说是无知。我正在尝试构建一个计时器应用程序,但是发现CountDownTimer对象对于我来说太不准确了。因此,我想手动创建计时器,只需在每个时间单位上打勾并对每个打勾执行某种操作(无需倒计时,因为我将手动处理此操作)-是否有内置对象来执行此操作(除了倒计时),或者我必须使用线程/休眠吗?使用处理程序和postDelayed()方法。准确且易于使用。您只需在每次循环后不断地放入回调,但这并不太繁重,并且允许您根据需要调整间隔 Handler timeThing = new H
处理程序和postDelayed()
方法。准确且易于使用。您只需在每次循环后不断地放入回调,但这并不太繁重,并且允许您根据需要调整间隔
Handler timeThing = new Handler();
Runnable timedWorker = new Runnable {
public void run(){
// Do work
timeThing.postDelayed(this, 10000); // do it again later
}
};
timeThing.postDelayed(timedWorker, 10000);
使用AsyncTask
和Thread.sleep()
:
AsyncTask task=new AsyncTask(){
@凌驾
受保护的Void doInBackground(Void…参数){
而(!isCancelled()){
试一试{
睡眠(1000);
出版进度();
}捕捉(中断异常e){
打破
}
}
返回null;
}
@凌驾
受保护的void onProgressUpdate(void…值){
//在这里做点什么
}
};
//task.execute();开始
//task.cancel();制止
您的onProgressUpdate()
将每N秒(本例中为1000秒)调用一次。AsyncTasks
并不打算长时间执行。执行器池是有限的,只要循环在运行,它就会占用一个插槽。Handler
解决方案使用主操作系统活套,它不易受到调度程序突发奇想的影响,也不会占用其他资源。
AsyncTask task=new AsyncTask<Void,Void,Void>() {
@Override
protected Void doInBackground(Void... params) {
while (!isCancelled()) {
try {
Thread.sleep(1000);
publishProgress();
} catch (InterruptedException e) {
break;
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... values) {
//do something here
}
};
//task.execute(); to start
//task.cancel(); to stop