这更多的是无知而不是无能的问题。我正在尝试构建一个计时器应用程序,但发现CountDownTimer对象对我的目的来说太不准确了。因此,我想手动创建计时器,只需勾选每个时间单位并在每个刻度上执行某种操作(不必倒计时到任何东西,因为我将手动处理) - 是否有内置对象要做这个(除了CountDownTimer),还是我必须使用线程/睡眠?
答案 0 :(得分:1)
使用Handler
和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);
答案 1 :(得分:0)
使用AsyncTask
和Thread.sleep()
:
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
您的onProgressUpdate()
将每N秒调用一次(本例中为1000)。