You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用重启后savedInstanceState无法保存整数值问题咨询

问题原因

savedInstanceState的设计定位是临时保存组件状态,它只在两种场景下有效:

  • 屏幕旋转、系统语言切换这类配置变更导致的Activity/Fragment重建
  • 应用在后台被系统低内存回收后,用户重新打开时恢复状态

当你主动关闭应用(比如按返回键、从任务管理器划掉),系统不会持久化保存savedInstanceState里的数据,所以重启应用后自然拿不到之前的VALUE。

解决方案:使用持久化存储

对于需要跨应用启动保留的简单整数值,最适合用SharedPreferences——Android原生提供的轻量级键值对持久化存储方案,专门处理这类小数据的持久化需求。

修改后的代码示例

保存值(替代原onSaveInstanceState逻辑)

你可以在数值更新时立即保存,或者在Fragment的onPause/onStop生命周期里执行保存操作:

// 获取SharedPreferences实例,第一个参数是存储文件名,第二个是私有访问模式
val sharedPref = requireContext().getSharedPreferences("AppPrefs", Context.MODE_PRIVATE)

// 封装保存方法
fun saveCurrentValue(value: Int) {
    sharedPref.edit()
        .putInt("VALUE", value)
        .apply() // 异步保存,不阻塞主线程,推荐用这个
        // 如果需要确认保存结果,可改用commit()同步保存
}

恢复值(替代原onViewCreated里的恢复逻辑)

在Fragment初始化时读取保存的数值:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val sharedPref = requireContext().getSharedPreferences("AppPrefs", Context.MODE_PRIVATE)
    // 第二个参数是默认值,当没有找到对应KEY时返回该值
    value = sharedPref.getInt("VALUE", 0)
}

注意事项

  • 记得在value每次发生变化时调用saveCurrentValue方法,确保数据实时持久化
  • SharedPreferences存储在应用私有目录,只有当前应用可访问,安全性足够覆盖普通场景

内容的提问来源于stack exchange,提问作者Flironic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:45:19