今天写一个比较有意思的算法,是从别的博客看到的。这个算法可以记下来,以后有其他类似需求可以做点小小的思想转变用此算法实现。代码如下:
···
public void showBuildVersion() {
System.arraycopy(seconds, 1, seconds, 0, seconds.length - 1);//把从第二位至最后一位之间的数字复制到第一位至倒数第二位
seconds[seconds.length - 1] = SystemClock.uptimeMillis();//更新最后一位
if (SystemClock.uptimeMillis() - seconds[0] <= 2000) {//连续点击之间间隔小于2秒,有效
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo;
try {
packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
ToastTool.showShort(this, "build版本号:" + packageInfo.versionCode);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
···
这个方法实现的是连续点击5次,即弹出版本号。每点击1次就调用showBuildVersion();
其中,seconds是一个长度为5的long数组。System.arraycopy(seconds, 1, seconds, 0, seconds.length - 1);表示把数组的第二位至最后一位之间的值复制到第一位至倒数第二位,
可以理解成把seconds数组的后4位整体往前移了1位,然后seconds[seconds.length - 1] = SystemClock.uptimeMillis();//更新最后一位。
取数组的第一位seconds[0]与当前系统时间判断,如果在2秒之内,即作出响应。只有在点击5次之后,seconds[0]才是有值的,否则seconds[0]的时间值是0,0与SystemClock.uptimeMillis()时间相差自然是不止2秒的。点击5次之后,seconds[0]有值了,它的值是第一次点击时的时间,与当前系统时间比较,差值<2秒,则作出响应。
有什么疑问或建议欢迎留言评论噢!谢谢你的观看。