#android #delay #detection
#Android #задержка #обнаружение
Вопрос:
У меня есть несколько интерактивных представлений. Я хочу собрать все клики последовательно, если они находятся в пределах 0,5 секунды после предыдущего клика, а затем выполнить пакетную обработку кликов только через 0,5 секунды после самого последнего клика.
например
Delay: 0.2 0.4 0.6
Click on A ---> B ---> C ---> D
Обработка должна быть «ABC» (скажем, передача их методу обработки в виде строки «ABC»), затем другой процесс для «D». У меня возникли проблемы с тем, чтобы придумать «поживем-увидим». Каков хороший подход для этого?
Заранее спасибо.
Майк
Комментарии:
1. это очень просто, покажите нам, что вы пробовали??
2. Я еще не пробовал какой-либо код. Все еще на стадии обдумывания. Такое ощущение, что какой-то поток сброса таймера в порядке, и если он выполняется до конца, то обрабатывайте все, что у него есть под рукой. Вопрос при таком подходе: как я могу проверить, существует ли поток уже в первую очередь, чтобы я не создавал его при каждом нажатии?
3. лучше сначала выполнить некоторую работу, а затем запросить решения
4. ОК. Позвольте мне попробовать и вернуться позже.
5. @IllegalArgument — Пожалуйста, взгляните на мой подход. Они кажутся нормальными?
Ответ №1:
В итоге я сделал это через обработчик, что довольно просто для этого случая. Для тех, кто заинтересован, я определил обработчик в действии, который обрабатывает назначенное сообщение, которое должно что-то немедленно обработать. Затем при каждом нажатии я очищаю очередь сообщений, а затем отправляю сообщение с задержкой в 0,5 секунды.
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 3001:
process();
break;
}
}
};
и всякий раз, когда есть представление, которое меня интересует, я добавляю следующие строки в его OnClickListener()
myHandler.removeMessages(3001);
myHandler.sendEmptyMessageDelayed(3001, 500);
Может быть случай чрезмерного удаления msg3001, но это нормально, поскольку система обрабатывает его корректно.
Комментарии:
1. Невозможно принять собственный ответ до истечения 48 часов… сделает это.