savedInstanceState 为 null 且未调用 onSaveInstanceState
savedInstanceState is null and onSaveInstanceState is not getting called
我已经尽职调查并检查了关于 SO 的所有答案,并纳入了建议,但出于某种原因 none 保存和恢复方法被调用。
一个答案建议我应该在 activity 级别保存以便调用片段保存状态,所以这是我的 activity
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)
}
}
我的Fragment如下
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 的状态)。它将在以下条件下被调用:
用户从 activity 移动到另一个 activity
用户按下 Home 键将应用程序带到后台
配置更改时,如用户旋转 phone 或更改语言等
在你的例子中,因为你按下了返回键,所以系统知道你要离开activity,所以不需要保存那个activity的状态,所以你从未见过 onSaveInstanceState()
和 onRestoreInstanceState()
被调用。
我已经尽职调查并检查了关于 SO 的所有答案,并纳入了建议,但出于某种原因 none 保存和恢复方法被调用。
一个答案建议我应该在 activity 级别保存以便调用片段保存状态,所以这是我的 activity
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)
}
}
我的Fragment如下
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 的状态)。它将在以下条件下被调用:
用户从 activity 移动到另一个 activity
用户按下 Home 键将应用程序带到后台
配置更改时,如用户旋转 phone 或更改语言等
在你的例子中,因为你按下了返回键,所以系统知道你要离开activity,所以不需要保存那个activity的状态,所以你从未见过 onSaveInstanceState()
和 onRestoreInstanceState()
被调用。