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

问题描述

我在后台要做的工作很漫长。因此,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);
        }
    }
}

但是似乎并不能取消已经运行的runnable,还是我应该延迟使用postDelayed()

解决方法

在您的可运行内部有一个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
}
,

使用以下代码

handler.removeCallbacksAndMessages(null);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...