## 修复的崩溃风险 (P0 优先级) ### 1. 修复 lateinit var partyId 未初始化访问崩溃 (100% 崩溃风险) **问题背景**: - TssRepository.partyId 是 lateinit var,必须在 registerParty() 中初始化 - 多个关键函数(startSessionEventSubscription、ensureSessionEventSubscriptionActive、startMessageRouting) 直接访问 partyId,如果在初始化前访问会抛出 UninitializedPropertyAccessException **崩溃场景**: 1. 网络重连时,registerParty() 未完成就触发会话订阅 2. Activity 快速销毁重建,初始化顺序错乱 3. 后台恢复时,Repository 状态不一致 **解决方案**: - 添加 requirePartyId() 函数进行强制初始化检查 - 在所有直接访问 partyId 的关键位置使用 requirePartyId() - 提供清晰的错误日志帮助调试 **修改位置**: - TssRepository.kt:108-135 - 添加 requirePartyId() 和 getPartyIdOrNull() - TssRepository.kt:281 - startSessionEventSubscription() 使用 requirePartyId() - TssRepository.kt:390 - ensureSessionEventSubscriptionActive() 使用 requirePartyId() - TssRepository.kt:1818 - startMessageRouting() 使用 requirePartyId() **风险等级**:P0 - 立即修复 **影响范围**:核心会话管理流程 **测试验证**:编译通过,无语法错误 --- ### 2. 修复 gRPC Channel 关闭导致的内存泄漏和 ANR **问题背景**: - GrpcClient.cleanupConnection() 中 channel.awaitTermination() 是阻塞操作 - 在主线程调用会导致 ANR (Application Not Responding) - 异常处理不完整,channel 可能未完全关闭 **崩溃/性能问题**: 1. Activity.onDestroy() → cleanup() → 主线程阻塞 → ANR → 应用无响应 2. 网络切换快速 disconnect/reconnect → channel 泄漏 → 内存溢出 → OOM 崩溃 3. 异常中断 → channel 未关闭 → 连接池耗尽 → 后续连接失败 **解决方案**: - 立即清空 channel/stub/asyncStub 引用,防止复用已关闭的连接 - 在后台 IO 线程异步执行 channel 关闭(scope.launch(Dispatchers.IO)) - 优雅关闭(3秒)→ 强制关闭(1秒)→ 完整异常处理 - 所有异常路径都确保 shutdownNow() 被调用 **修改位置**: - GrpcClient.kt:235-302 - 重写 cleanupConnection() 逻辑 - 异步关闭 channel,避免主线程阻塞 - 增强异常处理,确保资源释放 **风险等级**:P0 - 立即修复 **影响范围**:网络连接管理、应用生命周期 **测试验证**:编译通过,无语法错误 --- ## 修复效果 ✅ **防止应用崩溃**: - 消除 UninitializedPropertyAccessException 风险 - 避免 ANR 导致的系统强制关闭 - 防止 OOM 导致的内存崩溃 ✅ **提升稳定性**: - 网络重连更加健壮 - Activity 生命周期管理更安全 - 资源清理更加完整 ✅ **改善用户体验**: - 减少无响应提示 - 降低内存占用 - 提高连接成功率 ## 技术债务 待修复的问题(后续 PR): - P0-3: 实现统一的 Job 管理器 - P1: 竞态条件、OkHttpClient 连接池清理 - P2: 协程全局异常处理 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| account | ||
| message-router | ||
| server-party | ||
| server-party-api | ||
| server-party-co-managed | ||
| service-party-android | ||
| service-party-app | ||
| session-coordinator | ||
| tss-wasm | ||