android - 减慢用户在 Android 中按钮混搭的能力

标签 android performance onclicklistener

我有一项 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/

相关文章:

android - 在动态 ListView 中的第一个 EditText 上设置 RequestFocus

android - Compose 编译器的 Dolphin IDE : This version (1. 2.0-alpha05) 需要 Kotlin 版本 1.6.10,但您似乎使用 Kotlin 版本 1.6.21

java - 在 Aspect 中访问 HttpServletRequest 对象。提到的两种解决方案之间,哪一个是更好的解决方案

java - 如何设置点击按钮的点击限制?点击限制等于分数超过5

java - 有没有更好的方法来为整个布局设置 onClickListener?

android - 如何在 Activity 中显示 Snackbar 消息?

java - 使用 Firestore 和 Firebase Storage 将图像检索到 ImageView

macos - Mac w/PostgreSQL flush/empty cache for performance tuning

php - 是什么减轻了 PHP 服务器的负载 : SimpleXML or json_decode?

javascript - 如何在显示或隐藏 Leaflet LayerGroup 时获得通知?