fix: BLE autoReconnect 무한 루프 — max 10회 시도 후 포기

증상: demo APK 에서 한 번 BLE 연결 후 disconnect → autoReconnect
가 8초 간격으로 영원히 재시도 → isReconnecting=true 영구 유지
→ Clinical Home 진입 시 "BLE Connecting..." 무한 로딩.

원인: scheduleAutoReconnect 가 SCAN_TIMEOUT 마다 자기 자신을
재호출. 종료 조건은 (1) 실제 연결 (2) Bluetooth disabled 뿐.

수정:
- MAX_RECONNECT_ATTEMPTS = 10 상수 (≈ 100~120초 동안 시도)
- attemptAutoReconnect 진입 시 카운트 체크 → 초과 시
  isReconnecting=false, reconnectAttempt 초기화, 콜백 invoke
- 사용자가 ClinicalHome 의 [Connect] 버튼 또는 DeviceScan 재진입
  으로 명시적 재시도 가능.
This commit is contained in:
2026-06-12 10:17:53 +09:00
parent dd8a8457b7
commit 3179aac513
@@ -70,6 +70,8 @@ class BleManager private constructor(private val context: Context) {
private set
private var reconnectAttempt = 0
private val reconnectIntervalMs: Long = 3000
/** max retry — 10회 시도 후 포기 (≈ 8s scan × 10 + 간격, 약 100~120초). */
private val MAX_RECONNECT_ATTEMPTS = 10
private var reconnectTimer: Runnable? = null
@Volatile private var lastRxTimestamp: Long = 0
private var watchdogTimer: Runnable? = null
@@ -738,6 +740,14 @@ class BleManager private constructor(private val context: Context) {
isReconnecting.value = false
return
}
// max 시도 가드 — 무한 루프 방지. 초과 시 사용자가 명시적으로 재시도하도록.
if (reconnectAttempt >= MAX_RECONNECT_ATTEMPTS) {
debugLogger.warn("RECONNECT_GIVE_UP after ${reconnectAttempt} attempts — manual retry required")
isReconnecting.value = false
reconnectAttempt = 0
onReconnectionFailed?.invoke()
return
}
reconnectAttempt++
reconnectConnecting = false