gpt4 book ai didi

java - Android 定时器不精确

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:42 25 4
gpt4 key购买 nike

好的,所以,我是 java 和 android 编程的真正初学者。我正在尝试为友谊赛制作篮球应用程序。现在,我正在制作一个从 24 到 0 计数、播放声音并通过按钮重置的计时表。

public class MainActivity extends Activity {
private ShotClock shotClock;
private TextView shotClockTimer;
private Timer timer = new Timer();
private Button shotClockReset;
private final static int interval = 100;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
shotClockTimer = (TextView) findViewById(R.id.shotClock);
shotClockReset = (Button)findViewById(R.id.shotClockReset);
shotClock = new ShotClock();
shotClockReset.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
shotClock.shotClockReset();
}

});
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}

}, 0, interval);

}

private void TimerMethod() {
this.runOnUiThread(Timer_Tick);
}

private Runnable Timer_Tick = new Runnable() {
public void run() {
shotClock.advanceClock();
shotClockTimer.setText(String.format("%.1f",shotClock.getSeconds()));

}
};
}

我的想法是我有一个每 0.1 秒运行一次的计时器并相应地更新时钟。这工作正常,时钟从 24-0 开始计数并正确重置。我的问题是它不准确——我用其他 3 个计时器测试过它,它总是有点慢:当其他计时器达到 0 时,这个计时器只剩下 ~1-1.5 秒。除了以原始方式更改间隔之外,我还能做些什么来使其更准确?请友好,因为我是新来的:)感谢您的帮助!

最佳答案

那是因为内部调度,调度程序大约每 0.1 秒调用一次此方法。然而,系统本身是准确的。使用 System.currentTimeMillis() 更正此错误。

Android 本身不是实时应用程序,但系统是您可以获得的最准确的来源。

因此,例如为体育赛事编写精确的秒表在 android 中没有用例;)

只是循环计算毫秒的偏移量,如果达到偏移量,就调用一个方法。

但也要考虑这里的不准确性。始终使用开始时间(1*0.1 秒、2*0.1 秒...)而不是最后一个值来计算偏移量,因此请尽量减少此处的不准确性。

关于java - Android 定时器不精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com