fix(posture): 도넛차트 posture chip '감지 중' 무한 유지 버그 복구
증상: 도넛차트 페이지 진입 시 posture chip 이 계속 '감지 중' 만 표시. Logcat 확인 결과: - LaunchedEffect 는 실행됨 (isConnected=true, isDemoMode=false) - imuCollector.parseRim 은 매 초 성공 (`rim: 15 samples parsed`) - 그런데 POSTURE 로그가 하나도 안 뜸 → onComplete 콜백이 null 상태 원인: DisposableEffect onDispose 안의 `imuCollector.onComplete = null`. Compose 가 fragment hidden→visible 전환 또는 tab-navigation 재구성 시점에 예상 못한 timing 으로 onDispose 를 실행하는 경우, 콜백이 LaunchedEffect 세팅 직후 즉시 null 로 덮여 이후 rim 이 와도 실행 안 됨. 수정: DisposableEffect 에서 imuCollector.onComplete / piezoCollector. onMultiChannelComplete null 정리를 제거. 다음 진입 시 자기 LaunchedEffect 가 어차피 자기 콜백으로 덮어쓰므로 stale 콜백은 실질 무해. BleManager 콜백 3개 (onConnectionStateChanged 등) 는 좀비 세션 방지 위해 정리 유지. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+6
-2
@@ -866,8 +866,12 @@ fun PiezoMonitoringView(appState: AppState) {
|
||||
// 이탈 후에도 GC 방해 + 이후 다시 진입 시 stale closure 가 새 상태를 오염시킬 위험.
|
||||
androidx.compose.runtime.DisposableEffect(Unit) {
|
||||
onDispose {
|
||||
bleManager.imuCollector.onComplete = null
|
||||
bleManager.piezoCollector.onMultiChannelComplete = null
|
||||
// 2026-07-07 fix: imuCollector.onComplete null 정리 제거. Compose 가
|
||||
// fragment hidden→visible 전환 등에서 예상 못한 timing 으로 onDispose 를
|
||||
// 실행하는 경우 콜백이 세팅 직후 즉시 null 로 덮여 posture 표시 안 되는
|
||||
// 현상 발견. 다음 진입 시 LaunchedEffect(isConnected, isDemoMode) 가 자기
|
||||
// 콜백으로 다시 덮어쓰므로 stale 콜백은 실질 무해.
|
||||
// piezoCollector 도 동일 이유로 정리 제거.
|
||||
bleManager.onConnectionStateChanged = null
|
||||
bleManager.onUnexpectedDisconnect = null
|
||||
bleManager.onReconnectionFailed = null
|
||||
|
||||
Reference in New Issue
Block a user