Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:Handler.postdayed不';停不下来_Java_Android_Handler_Runnable - Fatal编程技术网

Java Android:Handler.postdayed不';停不下来

Java Android:Handler.postdayed不';停不下来,java,android,handler,runnable,Java,Android,Handler,Runnable,我无法停止下面示例中的handler.postDelayed。它在1秒后继续工作,在开关关闭时不会停止: mySwitch.setChecked(false); mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonV

我无法停止下面示例中的handler.postDelayed。它在1秒后继续工作,在开关关闭时不会停止:

    mySwitch.setChecked(false);
    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            final Handler handler = new Handler();

            final Runnable r = new Runnable() {
                public void run() {
                    myClient.SendData("AA");
                    handler.postDelayed(this, 1000);
                }
            };
            if (isChecked){
                handler.postDelayed(r, 1000);
            }
            else {
                handler.removeCallbacks(r);
            }
        }
    });
并且在开关关闭时不会停止:

    mySwitch.setChecked(false);
    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            final Handler handler = new Handler();

            final Runnable r = new Runnable() {
                public void run() {
                    myClient.SendData("AA");
                    handler.postDelayed(this, 1000);
                }
            };
            if (isChecked){
                handler.postDelayed(r, 1000);
            }
            else {
                handler.removeCallbacks(r);
            }
        }
    });
这是因为每次调用回调时都要实例化r。移动

   final Runnable r = new Runnable() {
        public void run() {
             myClient.SendData("AA");
             handler.postDelayed(this, 1000);
        }
   };
在回调之外。在方法或类的范围内