【问题标题】:I really can not stop the handler! How can I?我真的无法阻止处理程序!我怎样才能?
【发布时间】:2016-02-21 13:43:01
【问题描述】:

我已经用 Google 搜索过了,所有主题都说相同的解决方案 handler.removeCallbacks(null)handler.removeCallbacksAndMessages(null)。但他们都没有为我工作。

Handler handler;
Runnable runnable;

@Override
protected void onCreate(Bundle savedInstanceState) { 

    //...

    handler = new Handler();

    runnable = new Runnable() {
        @Override
        public void run() {
            time -= 100;
            if(time == 0){
                Intent i = new Intent(Question.this, WrongAnswer.class);
                startActivity(i);
                finish();
            }
            else{
                handler.postDelayed(this, 100);
            }
        }
    };

    handler.postDelayed(runnable,3000);

    //...
}

这是活动在时间用完之前退出的情况:

if(myAnswer == correctAnswer)
{
    Intent i = new Intent(this, CorrectAnswer.class);
    startActivity(i);
    handler.removeCallbacksAndMessages(null);
    finish();
}

【问题讨论】:

  • 使用 handler.removeCallbacks(runnable) 代替。
  • 我尝试过使用 handler.removeCallbacks(runnable) 但出现同样的问题
  • 即使您在可运行对象中调用完成,您的处理程序仍在运行?这不会停止当前的活动吗?
  • 首先我运行切换到另一个活动的意图,然后我使用 handler.removeCallbacksAndMessages(null) 停止处理程序,但在我的情况下它不起作用。然后我使用 finish() 退出上一个活动。
  • 可能是由于意图而发生的事情。据我在其他帖子中看到的,他们没有使用意图

标签: java android handler runnable


【解决方案1】:

您需要在handler.removeCallbacks(runnable) 工作之前使您的可运行文件全局化。此外,您可以使用全局变量来检查您是否已经取消(这只是为了安全)

private boolean isCancelled = false;
private Runnable mRunnable = new Runnable() {
    @Override
    public void run() {
        if (isCancelled)    return;
        time -= 100;
        if(time == 0){
            Intent i = new Intent(Question.this, WrongAnswer.class);
            startActivity(i);
            finish();
        }
        else{
            handler.postDelayed(this, 100);
        }
    }
};

然后:

isCancelled = true;
handler.removeCallbacks(mRunnable);

【讨论】:

  • 我认为 handler 和 runnable 已经是全局的,因为我在 onCreate 方法之前声明了它们。我做错了吗?
  • 您是否尝试过 isCancelled 布尔值?
  • 是的,我没有工作,可能是因为我完成()活动并且变量被破坏了。我不知道。
  • 我使用 isCanceled 布尔值的原理修复了这个问题,但我将数据存储在 SharedPreferences 中并且它工作良好,这个错误已修复
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2014-06-05
相关资源
最近更新 更多