From ac483b5f89ffc76a864c1b74549f22e6717f9020 Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 21:14:19 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E8=AE=A1=E6=95=B0=E5=AD=97?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=E5=88=B0=20SharedPreferences?= =?UTF-8?q?=EF=BC=8C=E9=87=8D=E5=90=AF=E5=90=8E=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前 lastStats 是内存缓存,重启后为 null,首页短暂显示默认值 0 现在每次 API 返回都持久化到 stats_cache SP 启动时优先读 SP 缓存 → 立即显示上次数字 → API 静默更新 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 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 b9bf1a2..6fed5ca 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 @@ -123,14 +123,16 @@ class HomeFragment : BaseFragment() { // 主动获取当前电量 initBatteryStatus() - // 先用缓存数据填充(避免 "0" → 真实值的闪烁) - notificationManager.lastStats?.let { cached -> - updateCardNum(tvPoolNum, cached.waitForTask) - updateCardNum(tvPunchNum, cached.treatTask) - updateCardNum(tvCompleteNum, cached.incompleteTask) - } + // 先用持久化缓存填充(重启后也不会闪 0) + val statsPrefs = requireContext().getSharedPreferences("stats_cache", android.content.Context.MODE_PRIVATE) + val cachedPool = notificationManager.lastStats?.waitForTask ?: statsPrefs.getInt("pool", 0) + val cachedPunch = notificationManager.lastStats?.treatTask ?: statsPrefs.getInt("punch", 0) + val cachedComplete = notificationManager.lastStats?.incompleteTask ?: statsPrefs.getInt("complete", 0) + updateCardNum(tvPoolNum, cachedPool) + updateCardNum(tvPunchNum, cachedPunch) + updateCardNum(tvCompleteNum, cachedComplete) - // 再异步请求最新数据,静默更新 + // 再异步请求最新数据,静默更新 + 持久化 viewLifecycleOwner.lifecycleScope.launch { val result = safeApiCall { taskApi.getStatistics() } if (result is ApiResult.Success && result.data != null) { @@ -139,6 +141,12 @@ class HomeFragment : BaseFragment() { updateCardNum(tvPunchNum, data.treatTask) updateCardNum(tvCompleteNum, data.incompleteTask) notificationManager.lastStats = data + // 持久化到 SP(重启后可用) + statsPrefs.edit() + .putInt("pool", data.waitForTask) + .putInt("punch", data.treatTask) + .putInt("complete", data.incompleteTask) + .apply() } // 基准设好后再开始监听事件 @@ -412,6 +420,13 @@ class HomeFragment : BaseFragment() { updateCardNum(tvPoolNum, data.waitForTask) updateCardNum(tvPunchNum, data.treatTask) updateCardNum(tvCompleteNum, data.incompleteTask) + // 持久化(重启后可用) + requireContext().getSharedPreferences("stats_cache", android.content.Context.MODE_PRIVATE) + .edit() + .putInt("pool", data.waitForTask) + .putInt("punch", data.treatTask) + .putInt("complete", data.incompleteTask) + .apply() } } }