如果按钮处于空闲状态,如何启动线程?

时间:2019-07-17 15:05:08

标签: java android

在按钮闲置3秒后,我需要一个线程来启动,有没有简单的方法?

我正在构建一个计数器应用程序,该按钮触发两个计数器,即总计数器和“轻击计数器”,轻击计数器有助于跟踪值的实际变化,显示用户执行了多少次轻击它会在几秒钟后消失,以便用户再次轻按。

3 个答案:

答案 0 :(得分:0)

首先,使用Timer(使用您的线程)创建一个TimerTask,并安排它在3秒钟后运行。

每次按下按钮,都会重置计时器。

public class MyClass{
    private Timer timer=new Timer()
    private TimerTask task=new TimerTask(){
        public void run(){
            //your action
        }
    };
    public void init(){
        timer.schedule(task,3000);
    }
    public void onButtonClick(){
        task.cancel();
        timer.schedule(task,3000);
    }
}

答案 1 :(得分:0)

对于类似这样的东西,我通常将HandlerRunnable一起使用,以便在用户未执行特定操作X milliseconds之后执行操作。

首先,创建一个runnable和一个handler

final android.os.Handler handler = new android.os.Handler();
private Runnable runnable;
private final long DELAY = 3000; // how many milliseconds you want to wait

然后添加onClickListener

myButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {        
  }
});

然后,在onClick事件中,删除callbacks并再次使handler处于如下状态:

if(runnable != null) {
  // in this case the user already clicked once at least
  handler.removeCallbacks(runnable);
}

runnable = new Runnable() {
  @Override    
  public void run() {
    //this code will run when user isn't clicking for the time you set before.
  }
};
handler.postDelayed(runnable, DELAY);

最终结果:

final android.os.Handler handler = new android.os.Handler();
private Runnable runnable;
private final long DELAY = 3000; // how many milliseconds you want to wait


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // all your previous stuffs


    myButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {       
        if(runnable != null) {
          // in this case the user already clicked once at least
          handler.removeCallbacks(runnable);
        }

        runnable = new Runnable() {
          @Override    
          public void run() {
            //this code will run when user isn't clicking for the time you set before.
          }
        };
        handler.postDelayed(runnable, DELAY); 
      }
    });
}

我希望这对任何问题都可以帮助

答案 2 :(得分:0)

处理程序可能在这种情况下工作,延迟为3000毫秒。

new Handler().postDelayed(new Runnable() { @Override public void run() { // do action } }, 3000);