fix: 统计数字持久化到 SharedPreferences,重启后不显示 0

之前 lastStats 是内存缓存,重启后为 null,首页短暂显示默认值 0
现在每次 API 返回都持久化到 stats_cache SP
启动时优先读 SP 缓存 → 立即显示上次数字 → API 静默更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-05-07 21:14:19 +09:30
parent f4e9410211
commit ac483b5f89

View File

@@ -123,14 +123,16 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
// 主动获取当前电量
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<FragmentHomeBinding>() {
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<FragmentHomeBinding>() {
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()
}
}
}