取消运行处理程序

时间:2013-12-27 17:04:50

标签: java android handler

好的,所以我对android java编程有点新意。我一直在寻找答案已经有一段时间没有任何成功了。

以下是一个例子:

setAlarmHandler(difference); //(difference is in MS)

public void setAlarmHandler (long difference) {
    Handler myHandler = new Handler();

    Runnable setAlarm = new Runnable() {    
        public void run() {
            System.out.println("test");
        }
    };

    // Schedule the execution
    myHandler.postDelayed(setAlarm, difference);
}

public void addListenerOnCheckBox1() {

    checkBox1.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if(checkBox1.isChecked()){
                                myHandler.removeCallbacks(setAlarm); }
            }
    });

}   

所以我尝试从"addListenerOnCheckBox1()"取消处理程序,但我收到错误"myHandler cannot be resolved"。那么我需要做什么才能从这个方法中取消处理程序?此外,如果我只是忽略“取消部分”(删除"myHandler.removeCallbacks(setAlarm);"),那么该应用程序在我的模拟器中运行得非常完美。

我确定我正在寻找的答案会让我感到非常愚蠢,但我无法独立完成这项工作。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

Handler myHandler将此声明为实例变量。

您已在myHandler中声明并初始化setAlarmHandler,这使其成为该方法的本地

public void setAlarmHandler (long difference) {
Handler myHandler = new Handler();// local to setAlaramHandler

对于

来说是一样的
Runnable setAlarm

答案 1 :(得分:1)

您可以删除与您的处理程序相关联的所有callbacks作为参数传递null。你的错误是每次调用方法时都要创建Runnable setAlarm的新实例。