From c754edd63b24c8192b7554875f53cc8fceee2103 Mon Sep 17 00:00:00 2001 From: dongliang Date: Wed, 29 Apr 2026 19:50:55 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=88await=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=9F=BA=E5=87=86=E5=86=8D=E7=9B=91=E5=90=AC=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E6=B6=88=E9=99=A4=E7=AB=9E=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:fetchStatistics(false)和fetchStatistics(checkDots=true) 是两个独立协程竞争,lastStats更新时机不可控。 修复:onViewCreated中用协程顺序执行: 1. 先 await safeApiCall → 设好 lastStats 基准 2. 再 observeEvents 开始监听通知 EventBus buffer=64 暂存期间的通知不丢失 这样当NewTaskArrived触发fetchStatistics(checkDots=true)时, lastStats一定已有值,preNotificationStats也能正确保存。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index 2025eb9..d86bd56 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -122,18 +122,29 @@ class HomeFragment : BaseFragment() { // 启动时钟定时器 startClockUpdater() - // 主动获取当前电量(ACTION_BATTERY_CHANGED 是粘性广播,但 EventBus 可能丢失首次事件) + // 主动获取当前电量 initBatteryStatus() - // 加载任务统计数据 - fetchStatistics() + // 先加载统计数据(设好 lastStats 基准),再监听事件 + // EventBus buffer=64 会暂存期间的通知,不丢失 + viewLifecycleOwner.lifecycleScope.launch { + // 同步等待统计数据返回 + val result = safeApiCall { taskApi.getStatistics() } + if (result is ApiResult.Success && result.data != null) { + val data = result.data + tvPoolNum.text = data.waitForTask.toString() + tvPunchNum.text = data.treatTask.toString() + tvCompleteNum.text = data.incompleteTask.toString() + notificationManager.lastStats = data + Timber.d("首页: lastStats 基准已设置 ${data}") + } - // 监听 MQTT 事件 - observeEvents() + // 基准设好后再开始监听事件 + observeEvents() + } // 监听打卡状态 observePunchState() - } override fun onResume() { @@ -143,8 +154,7 @@ class HomeFragment : BaseFragment() { renderDots() return } - // 有未读通知 → 用 preNotificationStats 精确对比 - // onResume 时 view 可能重建,需要重新请求 API + // 有未读通知 → 刷新统计 + 红点 fetchStatistics(checkDots = true) }