0

这更像是一个无知而不是无能的问题。我正在尝试构建一个计时器应用程序,但发现 CountDownTimer 对象对于我的目的来说太不准确了。因此,我想手动创建计时器,只需勾选每个时间单位并在每个滴答上执行某种操作(不必倒计时,因为我将手动处理) - 是否有内置对象要做这个(CountDownTimer 除外),还是我必须使用线程/睡眠?

4

2 回答 2

1

使用 aHandlerpostDelayed()方法。准确且易于使用。您只需要在每个循环之后继续放置回调,但这并不太繁琐,并且可以让您根据需要调整间隔。

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);
于 2013-01-18T01:05:35.750 回答
0

使用AsyncTaskThread.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

Your onProgressUpdate() will be called every N seconds (1000 in this example).

于 2013-01-18T01:07:58.710 回答