@@ -37,7 +37,7 @@ class NetworkMonitor(context: Context) {
private val _isAvailable = MutableStateFlow ( true ) // 乐观假设:初始时网络可用
val isAvailable : StateFlow < Boolean > = _isAvailable . asStateFlow ( )
/** 网络变化 计数器:任何网络回调触发时自增(用于检测 isAvailable 不变但底层网络已切换的场景 ) */
/** 网络切换 计数器:仅在 onLost / onAvailable 时自增(onCapabilitiesChanged 太频繁,不计数 ) */
private val _networkChangeCount = MutableStateFlow ( 0L )
val networkChangeCount : StateFlow < Long > = _networkChangeCount . asStateFlow ( )
@@ -76,19 +76,14 @@ class NetworkMonitor(context: Context) {
val hasInternet = capabilities . hasCapability (
NetworkCapabilities . NET _CAPABILITY _INTERNET
)
val wasAvailable = _isAvailable . value
_isAvailable . value = hasInternet
if ( ! hasInternet && wasAvailable ) {
// 网络能力降级(例如切换中暂时无 Internet)
// 不修改 _isAvailable —— onCapabilitiesChanged 在移动网络下太频繁
// (LTE↔5G 切换等),修改会导致 isAvailable collector 误触发重连。
// 仅记录时间戳供 consumeNetworkLossDisconnect 在 Go idle timeout 兜底时判断。
if ( ! hasInternet ) {
Log . d ( TAG , " Network capabilities degraded: hasInternet=false " )
lastLossTimestamp = System . currentTimeMillis ( )
pendingDisconnectFromLoss = true
}
if ( hasInternet && ! wasAvailable ) {
Log . d ( TAG , " Network capabilities restored: hasInternet=true " )
}
_networkChangeCount . value += 1
}
}