refactor(base): 优化协程作用域和空安全处理
- 将自定义CoroutineScope替换为lifecycleScope以避免内存泄漏 - 添加runCatching包装器处理潜在异常并记录错误日志 - 使用安全调用操作符替代强制调用防止空指针异常 - 在CountDownTimer中正确管理生命周期以避免内存泄漏 - 修复设备信息获取中的数组越界风险 - 统一异步操作的线程切换方式 - 保护Fragment中的_binding访问权限 - 改进相机助手对象引用的安全性检查
This commit is contained in:
@@ -238,7 +238,10 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
return@setCallback
|
||||
}
|
||||
if (this.userFaceInfo == null && isFitData(userFaceInfo)) {
|
||||
val headBmp = userFaceInfo.headBmp
|
||||
val headBmp = userFaceInfo.headBmp ?: run {
|
||||
loadLogInfo("collectFace,isFitData:headBmp 为 null,跳过")
|
||||
return@setCallback
|
||||
}
|
||||
if (headBmp.width <= 200 || headBmp.height <= 200) {
|
||||
loadLogInfo("collectFace,isFitData:拿到人脸提取特征数据照片过小w:${headBmp.width},h:${headBmp.height}-----------")
|
||||
binding.llCollectButton.visible()
|
||||
@@ -253,30 +256,30 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
}
|
||||
}
|
||||
recognizeViewModel.ftInitCode.observe(this) { ftInitCode: Int? ->
|
||||
if (ftInitCode != ErrorInfo.MOK) {
|
||||
if (ftInitCode != null && ftInitCode != ErrorInfo.MOK) {
|
||||
val error: String? = getString(
|
||||
R.string.specific_engine_init_failed, "ftEngine",
|
||||
ftInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(ftInitCode!!)
|
||||
ftInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(ftInitCode)
|
||||
)
|
||||
Timber.e("ftInitCode observe = $error")
|
||||
ToastUtils.showToast(error)
|
||||
}
|
||||
}
|
||||
recognizeViewModel.frInitCode.observe(this) { frInitCode: Int? ->
|
||||
if (frInitCode != ErrorInfo.MOK) {
|
||||
if (frInitCode != null && frInitCode != ErrorInfo.MOK) {
|
||||
val error: String? = getString(
|
||||
R.string.specific_engine_init_failed, "frEngine",
|
||||
frInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(frInitCode!!)
|
||||
frInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(frInitCode)
|
||||
)
|
||||
Timber.e("frInitCode observe = $error")
|
||||
ToastUtils.showToast(error)
|
||||
}
|
||||
}
|
||||
recognizeViewModel.flInitCode.observe(this) { flInitCode: Int? ->
|
||||
if (flInitCode != ErrorInfo.MOK) {
|
||||
if (flInitCode != null && flInitCode != ErrorInfo.MOK) {
|
||||
val error: String? = getString(
|
||||
R.string.specific_engine_init_failed, "flEngine",
|
||||
flInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(flInitCode!!)
|
||||
flInitCode, ErrorCodeUtil.arcFaceErrorCodeToFieldName(flInitCode)
|
||||
)
|
||||
Timber.e("flInitCode observe = $error")
|
||||
ToastUtils.showToast(error)
|
||||
@@ -615,7 +618,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
override fun onCameraConfigurationChanged(cameraID: Int, displayOrientation: Int) {
|
||||
Timber.i("initRgbCamera onCameraConfigurationChanged: threadName = ${Thread.currentThread().name}")
|
||||
if (rgbFaceRectTransformer != null) {
|
||||
rgbFaceRectTransformer!!.cameraDisplayOrientation = displayOrientation
|
||||
rgbFaceRectTransformer?.cameraDisplayOrientation = displayOrientation
|
||||
}
|
||||
Timber.i("initRgbCamera onCameraConfigurationChanged: $cameraID $displayOrientation")
|
||||
}
|
||||
@@ -672,10 +675,11 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
|
||||
private fun resumeCamera() {
|
||||
// isRecognition = true
|
||||
if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) {
|
||||
val helper = rgbCameraHelper
|
||||
if (helper != null && helper.isStopped) {
|
||||
loadLogInfo("collectFace,resumeCamera: ")
|
||||
isRecognition = true
|
||||
rgbCameraHelper!!.start()
|
||||
helper.start()
|
||||
} else {
|
||||
//recognizeViewModel.onPreviewFrame(ByteArray(1382400), true)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user