1

我在后台有一个很长的过程要做。所以onCreate,我在我的处理程序中发布了一个可运行的,handlerThread但我有一个允许用户取消它的按钮。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);
        }
    }
}

但似乎并没有取消已经运行的可运行,或者我应该使用postDelayed()一个巨大的延迟?

4

2 回答 2

0

在你的 runnable 里面有一个布尔标志running

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

您可以实现暂停、恢复或启动、停止,这完全取决于您的用例。

即类似的东西

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

或者

if(running) {
   // do some one shot code, i.e. the user can stop it if they press the button before the if, but not after. 
}

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

if(running) {
  // do step 1 code
}
if(running) {
  // do step 2 code
}
于 2020-08-24T09:37:46.337 回答
0

使用下面的代码

handler.removeCallbacksAndMessages(null);
于 2020-08-24T09:37:48.890 回答