android - savedInstanceState 是 null 并且 onSaveInstanceState 没有被调用
问题描述
我已经完成了我的尽职调查,并检查了所有关于 SO 的答案,纳入了建议,但由于某种原因,没有一个保存和恢复的方法被调用。
一个答案建议我应该在活动级别保存以便调用片段保存状态,所以这是我的活动
class MyActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.my_layout)
supportActionBar?.title = "My App"
}
// not called
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
}
// not called
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
// not called
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
}
}
我的片段如下。
class MyFragment: Fragment() {
// savedInstanceState is null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
// savedInstanceState is null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
}
// not getting called.
override fun onSaveInstanceState(bundle: Bundle) {
super.onSaveInstanceState(bundle)
bundle.putSerializable("users", arrayListOf()) // user array
}
}
所以不确定我在这里缺少什么来保存和恢复状态。
我如何测试?我按下后退按钮到主屏幕以将应用程序推到后台,然后将其带到前台。
解决方案
在 Android 中,onSaveInstanceState()
会被系统调用来保存 Activity 的当前状态,以确保当用户恢复应用程序时,他们会看到之前离开时的 Activity(通过调用onRestoreInstanceState()
来恢复 Activity 的状态)。它将在以下情况下调用:
用户从一个活动移动到另一个活动
用户按下 Home 键将应用程序置于后台
配置更改时,例如用户旋转手机或更改语言等。
在你的情况下,因为你按下了返回键,所以系统知道你想离开活动,所以不需要保存那个活动的状态,这就是为什么你永远不会看到onSaveInstanceState()
和onRestoreInstanceState()
被调用的原因。
推荐阅读
- c++ - 我可以在 main 之前创建 fstream 吗?
- ios - 如何在 iOS 14 中更改 UIPickerView 的选定色调颜色?
- python - 如何在循环中编写 DataFrames 到 excel
- linux - 使用 Sed 替换字符串?
- java - 从 List RecyclerView 计算总价
- javascript - 如何检测元素何时位于屏幕 JavaScript 的某个部分
- docker-compose - docker-compose 配置如何在维护现有数据的同时从使用匿名卷转换为命名卷?
- python - 当函数包含矩阵时,meshgrid 不起作用
- flutter - 获取 Dart 中即将出现的重复日的日期
- apache - Thruk cgi 身份验证覆盖