在产品测试,有些按钮或者功能需要进行暴力测试。理论上说是没啥问题,但是有些功能响应需要一定的时间,如果在很短时间内来多次点击就会异常或者奔溃。

因此,在有些功能是需要对功能加一些防爆力点击措施。闲着没事也整理一下自己项目中常用的措施,当然如果您有更好的方法,也欢迎分享。

你有一个苹果,我有一个苹果,彼此交换一下,我们仍然是各有一个苹果;但你有一种思想,我有一种思想,彼此交换,我们就都有了两种思想,甚至更多。

方法一: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();
            }

 

总结:两种方法,但个人偏爱于第二种方法简单使用。第一种还要考虑内存泄漏等问题。

相关文章

暂无评论

none
暂无评论...