线程是否足够可靠以计算秒数?

Rak*_*esh 6 java time multithreading android date

我正在制作一个Android应用程序,在某些活动中显示一个小时分钟和秒钟的计时器.由于秒值将每秒更新一次,我正在考虑制作一个1000毫秒睡眠的线程,在每个周期后它将添加1到秒并更新文本视图.因此,它将计算分钟和小时并更新相应的文本视图.

但是我有一个疑问,线程可靠到足以完成这样的任务,还是我应该使用内置的库函数来在每个周期后获得几秒钟?如果我完全依赖线程计算时间,我有点担心让我的计时器失去同步.

Lie*_*yan 8

睡眠不够好.

睡眠将暂停线程至少指定的时间段,但实际的睡眠时间可能比指定的时间长.


Saj*_*tta 7

使用处理程序.是一篇非常详细的文章.

long startTime = 0;

Handler timerHandler = new Handler();

Runnable timerRunnable = new Runnable() {
    @Override
    public void run() {
        long millis = System.currentTimeMillis() - startTime;
        int seconds = (int) Math.round(diff / ((double)1000));
        int minutes = (int) Math.round(seconds / ((double)60));
        seconds = seconds % 60;

        // Use the seconds

        timerHandler.postDelayed(this, 500);
    }
};
Run Code Online (Sandbox Code Playgroud)

启动计时器 -

startTime = System.currentTimeMillis();
timerHandler.postDelayed(timerRunnable, 0);
Run Code Online (Sandbox Code Playgroud)

停止计时器 -

timerHandler.removeCallbacks(timerRunnable);
Run Code Online (Sandbox Code Playgroud)

暂停 -

timerHandler.removeCallbacks(timerRunnable);
Run Code Online (Sandbox Code Playgroud)


Kep*_*pil 2

根据您所描述的逻辑,您确实会得到一些漂移,即每个周期可能出现的小错误将累积起来很大。不过,这很容易补救。

只需保留一个变量来保存最后一次触发的时间即可。睡眠完成后,添加1000到最后一次触发时间,计算该时间之前的余数,然后睡眠该时间。这样您可能会偶尔遇到延迟触发,但很快就会得到纠正。