用户可能会快速的点击按钮, 为了避免快速点击引起不必要的逻辑错误, 我们需记下第一次按下的时间, 等下次用户再点击的时候, 进行时间比对, 如果时间差值大于阈值, 那么才会响应事件, 否则过滤事件
private static long sLastTime;
public static synchronized boolean isProcessing() {
return isProcessing(300);
}
/**
* 是否处于执行任务状态,若不是,则设接下来[minTime]ms 为执行任务状态
* @param minTime 任务执行时长
* @return 是否处于执行任务状态
*/
public static synchronized boolean isProcessing(final long minTime) {
long newTime = calcTime(minTime, sLastTime);
if (newTime == sLastTime) {
return true;
} else {
sLastTime = newTime;
return false;
}
}
/**
* 下次任务执行到的时间戳
*/
private static synchronized long calcTime(final long minTime, long lastTime) {
if (SystemClock.elapsedRealtime() >= lastTime) {
return SystemClock.elapsedRealtime() + minTime;
}
return lastTime;
}
当按钮发生点击事件时, 我们可以使用以下方法进行处理:
public void onClick(View v) {
if (isProcessing()) {
return;
}
// TODO 点击事件具体的处理代码
...
}