onSaveInstanceState手机翻转时无法持久化数据问题求助
根据你提供的代码和描述,以下是几个容易忽略的排查方向:
检查变量初始化顺序
你在onCreate里的other codes如果在恢复数据之前就对revenue或dessertsSold进行了赋值(比如revenue = 0),会直接覆盖从savedInstanceState中恢复的值。确保恢复数据的代码放在所有可能修改这些变量的初始化逻辑之后。确认变量是类成员变量
如果revenue和dessertsSold是onCreate方法内的局部变量,那么即使恢复了值,也无法在其他方法或生命周期中保留。必须将它们定义为Activity/Fragment的成员变量(比如在类顶部声明:private var revenue = 0)。排查是否存在额外的重置逻辑
检查onStart、onResume等后续生命周期方法中,有没有重置revenue或dessertsSold的代码。比如某些初始化逻辑可能在每次Activity前台时都会执行,覆盖了恢复的数据。验证Bundle数据是否正确存入与读取
可以在onSaveInstanceState中打印要保存的变量值,确认存入Bundle的数据是正确的;同时在onCreate恢复数据后也打印变量值,对比是否和存入时一致。示例:// onSaveInstanceState中添加日志 Log.d(TAG, "Saving revenue: $revenue, dessertsSold: $dessertsSold") // onCreate恢复数据后添加日志 Log.d(TAG, "Restored revenue: $revenue, dessertsSold: $dessertsSold")检查Activity的配置变更处理
虽然你看到onSaveInstanceState被调用,但如果在AndroidManifest.xml中给当前Activity添加了android:configChanges="orientation|screenSize"等属性,系统可能不会按预期触发完整的生命周期重建流程。可以暂时移除该属性测试是否恢复正常。
内容的提问来源于stack exchange,提问作者Wei

