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:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user