我有一项 Activity 通过网络端口对远程设备运行一些 ASCII 控制。 界面上的每个按钮按下都会触发 AsyncTask 来处理通信,并且(最终)效果很好。 然而,如果用户像黑猩猩一样开始按钮混搭,系统将因同一套接字上的太多调用而崩溃,所以我想出了一个小定时器功能来减缓他们对兴奋的 react 。
我想知道是否有人提出了更好的方法来做到这一点?
首先,在 onCreate 中:
btn_pwrtoggle = (Button)findViewById(R.id.pwr_btn);
btn_pwrtoggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!buttonMasher){
if(powerstat.equals("OFF")){
String[] commandToSend = {"POWER","ON"}
}else{
String[] commandToSend = {"POWER","OFF"};
}
deviceControl(commandToSend);
}
startButtonMashTimer();
}else{
Log.w("button masher","slow down there, monkey.");
}
}
});
然后,在实际的Activity中:
Timer buttonTimer;
TimerTask buttonMonitorThread;
int chimpCrackCounter;
protected void startButtonMashTimer() {
chimpCrackCounter = 0;
buttonTimer = new Timer();
buttonMonitorThread = new TimerTask(){
@Override
public void run(){
buttonMasher = true;
if(chimpCrackCounter == 1){
buttonMasher = false;
buttonTimer.cancel();
}
chimpCrackCounter++;
}
};
buttonTimer.schedule(buttonMonitorThread, 0, 500);
}
它似乎工作得很好,(并且可能会帮助遇到同样困难的人)但我愿意接受建议。
最佳答案
防止用户频繁按下按钮的一个简单方法是保存按下按钮的时间,然后下次将上次时间与当前时间进行比较,如果差异太小,则忽略该 Action .
final static long minTimeBetweenClicks = 1000;
long lastTime;
onClick(View v){
if( System.currentTimeMillis() < lastTime + minTimeBetweenClicks ) return;
//Handle the click
lastTime = System.currentTimeMillis();
}
这样做的美妙之处在于它不需要任何新的线程或计时器,并且您的 AsyncTasks 不必知道这些按钮。
关于android - 减慢用户在 Android 中按钮混搭的能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738961/