Как запустить поток, если кнопка простаивает?

Мне нужно, чтобы поток запускался через 3 секунды бездействия кнопки, есть ли простой способ сделать это?

Я создаю приложение-счетчик, кнопка запускает два счетчика, общий счетчик и «счетчик нажатий», счетчик нажатий помогает отслеживать фактическое изменение значений, показывая, сколько нажатий сделал пользователь, мне нужно, чтобы он исчез через несколько секунд, чтобы пользователь мог нажать снова.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Сначала вы создаете 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);
    }
}
Ответ принят как подходящий

для таких вещей я обычно использую Обработчик с Запускаемый, чтобы делать что-то после 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); 
      }
    });
}

Я надеюсь, что это поможет, по любому вопросу, не стесняйтесь спрашивать

Обработчик может работать в этом сценарии с задержкой в ​​3000 миллисекунд.

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

вы должны останавливать его при каждом щелчке, иначе он просто запустит обработчик для каждого щелчка, не учитывая, нажимает ли пользователь по-прежнему или нет.

Pier Giorgio Misley 17.07.2019 17:22

Другие вопросы по теме