From b7aa8f73c27eedbad23e7bafe875147e73e668a1 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Tue, 7 Jul 2026 17:32:20 +0900 Subject: [PATCH] =?UTF-8?q?fix(posture):=20PlacementGuide=20/=20ClinicalLi?= =?UTF-8?q?ve=20DisposableEffect=20=EC=A0=95=EB=A6=AC=EB=8F=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 149e511 이후에도 사용자 실기 테스트에서 posture chip '감지 중' 지속. Logcat 확인: - LaunchedEffect start ✅ - rim: 15 samples parsed 매 초 정상 ✅ - POSTURE 로그 여전히 실종 원인: 149e511 은 PiezoMonitoringView 의 DisposableEffect 만 수정했으나 PlacementGuideView (line 173) / ClinicalLiveView (line 131) 에도 `imuCollector.onComplete = null` 이 있어, Compose 재구성 timing 에서 PiezoMonitoring 콜백 세팅 직후 이들의 onDispose 가 실행되면 여전히 null 로 덮임. 수정: 세 곳 모두 imuCollector.onComplete / piezoCollector.onMultiChannelComplete null 정리를 제거. 다음 화면 진입 시 자기 LaunchedEffect 가 어차피 자기 콜백으로 덮어쓰므로 stale 콜백 실질 무해. PlacementGuide 의 sendLedMode(0) 는 그대로 유지 (LED 실제 하드웨어 조작). Co-Authored-By: Claude Opus 4.7 --- .../vesiscan/ui/views/clinical/ClinicalLiveView.kt | 4 ++-- .../ui/views/monitoring/PlacementGuideView.kt | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/medithings/vesiscan/ui/views/clinical/ClinicalLiveView.kt b/app/src/main/java/com/medithings/vesiscan/ui/views/clinical/ClinicalLiveView.kt index 571c000..8567545 100644 --- a/app/src/main/java/com/medithings/vesiscan/ui/views/clinical/ClinicalLiveView.kt +++ b/app/src/main/java/com/medithings/vesiscan/ui/views/clinical/ClinicalLiveView.kt @@ -127,8 +127,8 @@ fun ClinicalLiveView(appState: AppState) { pendingPiezo = null } onDispose { - bleManager.piezoCollector.onMultiChannelComplete = null - bleManager.imuCollector.onComplete = null + // 2026-07-07 fix: null 정리 제거 (PiezoMonitoringView posture chip stuck 이슈). + // 다음 화면 진입 시 자기 콜백으로 어차피 덮어쓰므로 stale 콜백 무해. } } diff --git a/app/src/main/java/com/medithings/vesiscan/ui/views/monitoring/PlacementGuideView.kt b/app/src/main/java/com/medithings/vesiscan/ui/views/monitoring/PlacementGuideView.kt index e78538b..47a88dd 100644 --- a/app/src/main/java/com/medithings/vesiscan/ui/views/monitoring/PlacementGuideView.kt +++ b/app/src/main/java/com/medithings/vesiscan/ui/views/monitoring/PlacementGuideView.kt @@ -162,15 +162,14 @@ fun PlacementGuideView(appState: AppState) { sweepLastDetected = 0; sweepEverSawAll = false } - // 화면 벗어날 때 LED OFF + 콜백 정리. - // 2026-07-07 fix: piezoCollector.onMultiChannelComplete / imuCollector.onComplete 는 - // PlacementGuide 진입 시 자기 콜백으로 덮어쓰는데, 이탈 시 정리하지 않으면 다음 - // 화면 (PiezoMonitoring 등) 의 콜백과 stale reference 가 뒤엉킴. + // 화면 벗어날 때 LED OFF. + // 2026-07-07 fix: imuCollector.onComplete / piezoCollector.onMultiChannelComplete + // null 정리 제거. Compose 재구성 timing 문제로 PiezoMonitoringView 콜백 세팅 직후 + // 여기 onDispose 가 실행되어 null 로 덮어써 posture "감지 중" 무한 유지 발생. + // 다음 화면 진입 시 자기 LaunchedEffect 가 어차피 자기 콜백으로 덮어씀. androidx.compose.runtime.DisposableEffect(Unit) { onDispose { bleManager.sendLedMode(0) - bleManager.piezoCollector.onMultiChannelComplete = null - bleManager.imuCollector.onComplete = null } }