博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 虹软2.0人脸识别,注册失败问题 分析synchronized的作用
阅读量:4611 次
发布时间:2019-06-09

本文共 1062 字,大约阅读时间需要 3 分钟。

人脸识别需要init初始化(FaceServer中),离开时需要unInit销毁;当一个含有人脸识别的界面A跳向另一个含有人脸识别的界面B时,由于初始化和销毁都是对FaceServer类加锁(synchronized (this) {})的,所以导致注册时为注销失败,或注册了又被注销失败。

FaceServer类中:

初始化:

public boolean init(Context context) {synchronized (this) {if (faceEngine == null && context != null) {faceEngine = new FaceEngine();int engineCode = faceEngine.init(context, FaceEngine.ASF_DETECT_MODE_IMAGE, FaceEngine.ASF_OP_0_HIGHER_EXT, 16, 1, FaceEngine.ASF_FACE_RECOGNITION | FaceEngine.ASF_FACE_DETECT);if (engineCode == ErrorInfo.MOK) {initFaceList(context);return true;} else {faceEngine = null;Log.e(TAG, "init: failed! code = " + engineCode);return false;}}return false;}}

 

销毁:

public void unInit() {synchronized (this) {if (faceRegisterInfoList != null) {faceRegisterInfoList.clear();faceRegisterInfoList = null;}if (faceEngine != null) {faceEngine.unInit();faceEngine = null;}}}

  

两个人脸识别界面都是用的同一个FaceServer类,synchronized导致如果当前有其他线程正持有该类锁,那么新到的线程就必须等待,所以

①A跳转B后注销A(uninit),则会导致B中初始化(init)时已存在faceEngine对象,然后注销A时又会删除faceEngine对象,导致人脸注册失败

转载于:https://www.cnblogs.com/Zzz-/p/10577986.html

你可能感兴趣的文章
冲刺周期一--站立会议04
查看>>
支持IE6以上阴影效果纯CSS
查看>>
优化算法与特征缩放
查看>>
NOIP模板复习(4)区间操作之莫队算法,树状数组,线段树
查看>>
git warning: LF will be replaced by CRLF in 解决办法
查看>>
浅谈MVP设计模式
查看>>
深入理解PHP中的引用和赋值
查看>>
红黑树
查看>>
(转载)maven profile多环境自动切换配置
查看>>
py三个面试小问题
查看>>
图像类推效果图
查看>>
php pdo_mysql使用方法
查看>>
Android驱动开发第二章随想
查看>>
String API
查看>>
O(1)纬度减少循环次数
查看>>
绑定域名到 GitHub Pages
查看>>
javaweb-简单的验证码和算术验证码
查看>>
深入理解Javascript系列之类型
查看>>
DateTime数据类型保存问题(DateTime2)
查看>>
【算法学习】【洛谷】cdq分治 & P3810 三维偏序
查看>>