在产品测试,有些按钮或者功能需要进行暴力测试。理论上说是没啥问题,但是有些功能响应需要一定的时间,如果在很短时间内来多次点击就会异常或者奔溃。
因此,在有些功能是需要对功能加一些防爆力点击措施。闲着没事也整理一下自己项目中常用的措施,当然如果您有更好的方法,也欢迎分享。
你有一个苹果,我有一个苹果,彼此交换一下,我们仍然是各有一个苹果;但你有一种思想,我有一种思想,彼此交换,我们就都有了两种思想,甚至更多。
方法一:Handler机制
原理:设置判断条件,响应过后设置标签为false,然后使用Handler的延迟机制设置为true
PS:下面只是部分代码展示
boolean allowClick = true; //默认是true
if(!allowClick){
return;
}
allowClick= false;
//延迟2s后allowClick置为true
uiHandler.sendEmptyMessageDelayed(MSG_DELAY_ALLOW_CLICK, 2000);
allowClick置为true要考虑其他情况,比如onPause()、onDestory()、onResume()也要置为true,否则有时候可能出现无法响应(因为allowClick为false)
方法二:比对开始响应时间和下一次响应时间间隔
原理:也是设置判断条件,但是这个只是计算上一次响应到下一次响应时间,如果符合条件就继续执行。
我们知道下面两个方法都可以
1、public static long currentThreadTimeMillis () 返在当前线程运行的毫秒数。
2、public static long elapsedRealtime () 返回系统启动到现在的毫秒数,包含休眠时间。
理论上都可以用,但是个人偏爱elapsedRealtime(),这个是计算系统启动到现在的时间,比较准确。
long pre= 0; //定义在方法之外,用于保存时间
//执行功能内,获取当前执行时的时间
long cur = SystemClock.elapsedRealtime();
if ((cur - pre) > 1500) {//间隔大于1.5s
//do something ....
pre = SystemClock.elapsedRealtime();
}
总结:两种方法,但个人偏爱于第二种方法简单使用。第一种还要考虑内存泄漏等问题。
© 版权声明