gpt4 book ai didi

android - 计时器不停止

转载 作者:行者123 更新时间:2023-11-29 22:01:03 26 4
gpt4 key购买 nike

基本上,当用户赢得游戏时,我想制作动画(向上计数)从原始分数到新分数。

我正在尝试使用如下所示的计时器来执行此操作

    public final void updatePlayerScore(final int newScore){ 
final Timer t = new Timer();
TimerTask tt = new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
public void run() {
initialScore++;
// update TextView
scoresTextView.setText("" + initialScore);
if(initialScore >= newScore){
t.cancel();
mHandler2.postDelayed(mLaunchNextQuestion,1000);
}
}
});
}
};


t.scheduleAtFixedRate(tt, 0, 2);

当 initialScore 等于或大于 newScore 时,每次调用 TimerTask(每 2 毫秒)时,初始分数都会向上递增 - 它应该取消计时器,然后加载新 Activity mLaunchNextQuestion。

实际情况是 mLaunchNextQuestion 被调用了不止一次。我猜这是因为 timer.cancel 不工作或定时器运行速度太快而无法取消?

更新---

感谢关于刷新率太快的建议。我最终放弃了计时器,而是使用了一个在延迟后调用自身的可运行对象。

private Runnable updatePlayerScoreNew(final int newScore){

Runnable aRunnable = new Runnable(){
public void run(){
if (initialScore >= newScore) {
mHandler.postDelayed(mLaunchNextQuestion,1000);
} else {
initialScore+=40;
if(initialScore > newScore){
scoresTextView.setText("" + newScore);
}else{
scoresTextView.setText("" + initialScore);
}
mHandler.postDelayed(updatePlayerScoreNew(newScore), 40);
}
}
};

return aRunnable;
}

最佳答案

您为什么以 500Hz 的频率运行此计时器?这只是显示一个滴答分数,对吧?人眼看不到移动得那么快的东西。实际上,它仅记录 13Hz 左右的变化(取决于变化的类型),因此通常将该速率加倍(至 25Hz 或 30Hz)是安全的。

不过,500Hz 过高了。尝试将速率设置为较慢的值,然后看看会发生什么。

You can also try calling cancel() on the TimerTask ,虽然我认为在 Timer 上调用 cancel() 应该是有效的。

关于android - 计时器不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11931788/

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