我的代码中有一个每X秒运行一次的处理程序。每次运行时,它都会执行一项任务。当任务执行4次而没有用户交互时,我将其设置为返回到我的主要活动。这是处理程序代码:
final Handler h1 = new Handler();
final int delay1 = 400;
h1.postDelayed(new Runnable(){
public void run(){
enableRandomButton();
buttonsInPlay = sumVector(greenButtons);
if (buttonsInPlay >= 4){
if (currentScore > highScore){
highScore = currentScore;
}
// GO TO SCORE SCREEN
h1.removeCallbacks(this);
Intent intent = new Intent(Game.this, Main.class);
Game.this.startActivity(intent);
Game.this.finish();
}
h1.postDelayed(this, delay1);
}
}, delay1);
当我到达主屏幕时,确实如此。然而,一旦它回到主屏幕,It KEEPS无限期地启动新的主要活动。我怀疑这个处理程序由于某种原因没有被正确取消。如果上面的代码没有问题,我将很乐意分享我的其余代码(主要是我的Android生命周期方法等)。谢谢!
答案 0 :(得分:0)
试试这个。当满足终止条件时,不要再次发布Runnable。还要记住,finish()不是立即的,并且不会破坏当前工作单元的执行:
if (buttonsInPlay >= 4){
if (currentScore > highScore){
highScore = currentScore;
}
// GO TO SCORE SCREEN
// h1.removeCallbacks(this); // not helpful, nothing is scheduled at this moment
Intent intent = new Intent(Game.this, Main.class);
Game.this.startActivity(intent);
Game.this.finish();
}
else {
// Only reschedule if we have to continue
h1.postDelayed(this, delay1);
}