今天寫一個(gè)比較有意思的算法,是從別的博客看到的。這個(gè)算法可以記下來,以后有其他類似需求可以做點(diǎn)小小的思想轉(zhuǎn)變用此算法實(shí)現(xiàn)。代碼如下:
···
public void showBuildVersion() {
System.arraycopy(seconds, 1, seconds, 0, seconds.length - 1);//把從第二位至最后一位之間的數(shù)字復(fù)制到第一位至倒數(shù)第二位
seconds[seconds.length - 1] = SystemClock.uptimeMillis();//更新最后一位
if (SystemClock.uptimeMillis() - seconds[0] <= 2000) {//連續(xù)點(diǎn)擊之間間隔小于2秒,有效
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo;
try {
packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
ToastTool.showShort(this, "build版本號:" + packageInfo.versionCode);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
···
這個(gè)方法實(shí)現(xiàn)的是連續(xù)點(diǎn)擊5次,即彈出版本號。每點(diǎn)擊1次就調(diào)用showBuildVersion();
其中,seconds是一個(gè)長度為5的long數(shù)組。System.arraycopy(seconds, 1, seconds, 0, seconds.length - 1);表示把數(shù)組的第二位至最后一位之間的值復(fù)制到第一位至倒數(shù)第二位,
可以理解成把seconds數(shù)組的后4位整體往前移了1位,然后seconds[seconds.length - 1] = SystemClock.uptimeMillis();//更新最后一位。
取數(shù)組的第一位seconds[0]與當(dāng)前系統(tǒng)時(shí)間判斷,如果在2秒之內(nèi),即作出響應(yīng)。只有在點(diǎn)擊5次之后,seconds[0]才是有值的,否則seconds[0]的時(shí)間值是0,0與SystemClock.uptimeMillis()時(shí)間相差自然是不止2秒的。點(diǎn)擊5次之后,seconds[0]有值了,它的值是第一次點(diǎn)擊時(shí)的時(shí)間,與當(dāng)前系統(tǒng)時(shí)間比較,差值<2秒,則作出響應(yīng)。
??????? 有什么疑問或建議歡迎留言評論噢!謝謝你的觀看。