fix(glass): 修复复合叠放功能中的内存泄漏和状态检查问题

- 更新 glass3.open.sdk 依赖版本从 2.1.7-E 到 2.1.6-E
- 在 CompositeLayupResultActivity 中添加 activity 状态检查避免已销毁后执行操作
- 在 CompositeLayupTaskActivity 中添加 activity 状态检查避免已销毁后执行操作
- 在 CompositeLayupResultActivity 的 onDestroy 中清理 UI handler 回调和媒体服务监听器
- 在 CompositeLayupTaskActivity 的 onDestroy 中清理媒体服务回调和离线命令监听器
这个提交包含在:
徐勤民 2026-04-23 09:58:38 +08:00
父节点 9376f1665b
当前提交 fbbd205386
共有 3 个文件被更改,包括 12 次插入1 次删除

查看文件

@ -142,7 +142,8 @@ dependencies {
implementation 'com.google.android.material:material:1.3.0' implementation 'com.google.android.material:material:1.3.0'
implementation "io.noties.markwon:core:4.6.2" implementation "io.noties.markwon:core:4.6.2"
implementation ('com.rokid.security:glass3.open.sdk:2.1.7-E') { // implementation ('com.rokid.security:glass3.open.sdk:2.1.7-E') {
implementation ('com.rokid.security:glass3.open.sdk:2.1.6-E') {
exclude group: "org.slf4j" exclude group: "org.slf4j"
} }
implementation 'com.rokid.security.sdk:online-speech:0.1.0' implementation 'com.rokid.security.sdk:online-speech:0.1.0'

查看文件

@ -56,11 +56,13 @@ class CompositeLayupResultActivity : BaseActivity<ActivityCompositeLayupResultBi
private var uiMode = UiMode.RECOGNIZE_SUCCESS private var uiMode = UiMode.RECOGNIZE_SUCCESS
private val layupWorkingRunnable: Runnable = Runnable { private val layupWorkingRunnable: Runnable = Runnable {
if (isFinishing || isDestroyed) return@Runnable
if (uiMode == UiMode.LAYUP_PROMPT) { if (uiMode == UiMode.LAYUP_PROMPT) {
applyMode(UiMode.LAYUP_WORKING) applyMode(UiMode.LAYUP_WORKING)
} }
} }
private val completeRunnable: Runnable = Runnable { private val completeRunnable: Runnable = Runnable {
if (isFinishing || isDestroyed) return@Runnable
if (uiMode == UiMode.COMPLETE) { if (uiMode == UiMode.COMPLETE) {
goTaskList() goTaskList()
} }
@ -293,6 +295,10 @@ class CompositeLayupResultActivity : BaseActivity<ActivityCompositeLayupResultBi
} }
override fun onDestroy() { override fun onDestroy() {
uiHandler.removeCallbacksAndMessages(null)
GlassMediaServiceHelper.removePhotoCallback(photoCallback)
OfflineCmdServiceHelper.removeListenerCompositeLayup()
OfflineCmdServiceHelper.removeOnLineListener(listener)
super.onDestroy() super.onDestroy()
window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }

查看文件

@ -59,6 +59,7 @@ class CompositeLayupTaskActivity :
override fun getCallbackId(): String = photoCallbackId override fun getCallbackId(): String = photoCallbackId
override fun onTakePhotoV2(path: String?, width: Int, height: Int) { override fun onTakePhotoV2(path: String?, width: Int, height: Int) {
if (isFinishing || isDestroyed) return
LogHelper.d("CompositeLayupTask onTakePhotoV2 width=$width height=$height path=$path") LogHelper.d("CompositeLayupTask onTakePhotoV2 width=$width height=$height path=$path")
if (path == null) { if (path == null) {
if (isPhoto) { if (isPhoto) {
@ -142,6 +143,9 @@ class CompositeLayupTaskActivity :
override fun onDestroy() { override fun onDestroy() {
isCaptureInFlight = false isCaptureInFlight = false
hasNavigatedNextPage = false hasNavigatedNextPage = false
GlassMediaServiceHelper.removePhotoCallback(photoCallback)
OfflineCmdServiceHelper.removeListenerCompositeLayup()
OfflineCmdServiceHelper.removeOnLineListener(listener)
super.onDestroy() super.onDestroy()
window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }