rwadurian/backend
hailin 6f38f96b5a fix(android): 修复架构中导致应用崩溃的 P0 级别 bug
## 修复的崩溃风险 (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>
2026-01-26 21:02:00 -08:00
..
.claude refactor: simplify mpc-service to gateway mode 2025-12-06 17:16:14 -08:00
api-gateway fix(kong): remove ws/wss protocols from WebSocket route 2026-01-18 21:36:30 -08:00
infrastructure chore(docker): 为 mpc-system、api-gateway、infrastructure 添加时区配置 2025-12-23 18:35:09 -08:00
mpc-system fix(android): 修复架构中导致应用崩溃的 P0 级别 bug 2026-01-26 21:02:00 -08:00
scripts fix(scripts): 修正容器名为 rwa-blockchain-service 2025-12-15 10:34:25 -08:00
services fix(contribution-service): CDC planting_orders 阶段按 order_id 排序处理 2026-01-23 03:41:14 -08:00
.env.windows fix(referral): 修复 getMyReferralInfo 使用 userId 而不是 accountSequence 的问题 2025-12-14 05:05:03 -08:00
docker-compose.windows.yml feat(service-party-app): implement co-sign multi-party signing 2025-12-30 18:36:11 -08:00