修复移动网络下频繁触发重连的问题

This commit is contained in:
sansen
2026-07-24 10:41:40 +08:00
parent 4cc3047a6f
commit 31424f8ff6
2 changed files with 7 additions and 12 deletions
+2 -2
View File
@@ -13,8 +13,8 @@ android {
applicationId = "com.tsmobile.app" applicationId = "com.tsmobile.app"
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 35
versionCode = 6 versionCode = 7
versionName = "1.0.6" versionName = "1.0.7"
} }
signingConfigs { signingConfigs {
@@ -37,7 +37,7 @@ class NetworkMonitor(context: Context) {
private val _isAvailable = MutableStateFlow(true) // 乐观假设:初始时网络可用 private val _isAvailable = MutableStateFlow(true) // 乐观假设:初始时网络可用
val isAvailable: StateFlow<Boolean> = _isAvailable.asStateFlow() val isAvailable: StateFlow<Boolean> = _isAvailable.asStateFlow()
/** 网络变化计数器:任何网络回调触发时自增(用于检测 isAvailable 不变但底层网络已切换的场景 */ /** 网络切换计数器:仅在 onLost / onAvailable 时自增(onCapabilitiesChanged 太频繁,不计数 */
private val _networkChangeCount = MutableStateFlow(0L) private val _networkChangeCount = MutableStateFlow(0L)
val networkChangeCount: StateFlow<Long> = _networkChangeCount.asStateFlow() val networkChangeCount: StateFlow<Long> = _networkChangeCount.asStateFlow()
@@ -76,19 +76,14 @@ class NetworkMonitor(context: Context) {
val hasInternet = capabilities.hasCapability( val hasInternet = capabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_INTERNET NetworkCapabilities.NET_CAPABILITY_INTERNET
) )
val wasAvailable = _isAvailable.value // 不修改 _isAvailable —— onCapabilitiesChanged 在移动网络下太频繁
_isAvailable.value = hasInternet // (LTE↔5G 切换等),修改会导致 isAvailable collector 误触发重连。
// 仅记录时间戳供 consumeNetworkLossDisconnect 在 Go idle timeout 兜底时判断。
if (!hasInternet && wasAvailable) { if (!hasInternet) {
// 网络能力降级(例如切换中暂时无 Internet)
Log.d(TAG, "Network capabilities degraded: hasInternet=false") Log.d(TAG, "Network capabilities degraded: hasInternet=false")
lastLossTimestamp = System.currentTimeMillis() lastLossTimestamp = System.currentTimeMillis()
pendingDisconnectFromLoss = true pendingDisconnectFromLoss = true
} }
if (hasInternet && !wasAvailable) {
Log.d(TAG, "Network capabilities restored: hasInternet=true")
}
_networkChangeCount.value += 1
} }
} }