Java android-取消已开始运行的runnable

Java android-取消已开始运行的runnable,java,android,runnable,android-handlerthread,Java,Android,Runnable,Android Handlerthread,我在后台有一个漫长的过程要做。因此,onCreate,我在处理程序中发布了一个来自handlerThread的runnable,但我有一个按钮,允许用户取消它。启动后是否可以停止运行的Runnable @Override protected void onCreate(Bundle savedInstanceState) { Handler h = new Handler( HandlerThread.getLooper() ); Runnable runnable = //cl

我在后台有一个漫长的过程要做。因此,
onCreate
,我在处理程序中发布了一个来自
handlerThread
的runnable,但我有一个按钮,允许用户取消它。启动后是否可以停止运行的
Runnable

@Override
protected void onCreate(Bundle savedInstanceState) {
    Handler h = new Handler( HandlerThread.getLooper() );
    Runnable runnable = //class that implements runnable;

    h.post( runnable );

    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            h.removeCallbacks(runnable);
        }
    }
}

但是这似乎并没有取消已经运行的runnable,或者我应该使用具有巨大延迟的
postDelayed()

在您的runnable中有一个用于
运行的布尔标志

然后,您的按钮可以将此标志设置为true/false,以停止其运行

您可以实现暂停、恢复或启动、停止,这一切都取决于您的用例

i、 例如

while(running) {
   // Your repeated background code
}

您还可以有多个步骤,允许中途取消

if(running) {
  // do step 1 code
}
if(running) {
  // do step 2 code
}

在runnable的内部有一个用于运行的布尔标志

然后,您的按钮可以将此标志设置为true/false,以停止其运行

您可以实现暂停、恢复或启动、停止,这一切都取决于您的用例

i、 例如

while(running) {
   // Your repeated background code
}

您还可以有多个步骤,允许中途取消

if(running) {
  // do step 1 code
}
if(running) {
  // do step 2 code
}
使用下面的代码

handler.removeCallbacksAndMessages(null);
使用下面的代码

handler.removeCallbacksAndMessages(null);

这会取消所有的跑步,所以可能会取消我想继续跑步的跑步。这会取消所有的跑步,所以可能会取消我想继续跑步的跑步