Android:处理程序没有正确取消

时间:2016-04-09 02:12:43

标签: java android handler

我的代码中有一个每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生命周期方法等)。谢谢!

1 个答案:

答案 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);
        }