最近看到了手势解锁的源码,听说是从原生代码中提取出来的,确实值得学习一下。
解读代码的时候,发现又有很多知识点需要学习,特此记录一下:
1. FileObserver
http://blog.csdn.net/archer_zoro/article/details/35797509
2. AtomicBoolean
起到一个原子操作的作用,他有一个常用方法compareAndSet(boolean expect, boolean update)
用于先比较,再赋值,将这一个动作做成了一个原子操作,中间不会被插入其他的操作。
应用场景:
http://kabike.iteye.com/blog/1775379
http://blog.csdn.net/wenwenshi5/article/details/14454337
3. hash加密算法 sha1和md5
sha-1是160位的,md5是120位的
都是不可能的单向算法,产生固定位数的hash值
用于加密
4. MessageDigest
http://blog.csdn.net/hudashi/article/details/8394158
java.security.MessageDigest类用于为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。简单点说就是用于生成散列码。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。
5. 手势编码
9个点,根据行数和列数依次编号为0-8,
按手势的顺序分别变成一个byte,那么密码就是byte[]
然后进行sha-1加密即可
6. SystemClock.elapsedRealtime()
-
elapsedRealtime()
andelapsedRealtimeNanos()
return the time since the system was booted, and include deep sleep. This clock is guaranteed to be monotonic, and continues to tick even when the CPU is in power saving modes, so is the recommend basis for general purpose interval timing.
简答来说,就是自从开机之后到现在的时间,包括深度睡眠。
7. sendAccessibilityEvent
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
android4.0之后提供的一个辅助功能,用于给那些感知功能有缺失的人服务(视力、听力、触觉),调用这个函数就是发出一个这样的提示
<span style="white-space:pre"> </span>private void sendAccessEvent(int resId) {
setContentDescription(getContext().getString(resId));
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
setContentDescription(null);
}