Android的程序如下: package com.example.activitylifecycletest
//import kotlinx.android.synthetic.main.main_layout.xml.* import android.content.Intent import android.os.Bundle import android.util.Log import android.widget.Button import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private val tag = "MainActivity信息"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "onCreate")
setContentView(R.layout.activity_main)
// 获取按钮的引用
val startNormalButton: Button = findViewById(R.id.startNormalButton)
val startDialogButton: Button = findViewById(R.id.startDialogButton)
//将保存的数据取出来
if (savedInstanceState != null) {
val tempData = savedInstanceState.getString("data_key")
if (tempData != null) {
Log.d(tag, tempData)
}
}
startNormalButton.setOnClickListener {
val intent = Intent(this, NormalActivity::class.java)
startActivity(intent)
}
startDialogButton.setOnClickListener {
val intent = Intent(this, DialogActivity::class.java)
startActivity(intent)
}
}
override fun onDestroy() {
super.onDestroy()
Log.d(tag, "onDestroy")
}
override fun onRestart() {
super.onRestart()
Log.d(tag, "onRestart")
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
val tempData = "输入的、希望保存的信息。"
outState.putString("data_key", tempData)
}
}
请问override fun onSaveInstanceState(outState: Bundle)函数是什么时候会被调用的?具体是谁调用的?
override fun onSaveInstanceState(outState: Bundle)
函数是在活动(Activity)即将被系统销毁之前调用的。这个方法允许你保存活动的当前状态,以便在活动重新创建时可以恢复这些状态。具体来说,这个方法通常在以下几种情况下被调用:
具体调用这个方法的是Android系统本身。系统在决定销毁活动之前,会调用onSaveInstanceState
方法,让你有机会保存需要持久化的数据。保存的数据会被存储在Bundle
对象中,并在活动重新创建时通过onCreate
方法的savedInstanceState
参数传递回来。
以下是一个简化的调用流程:
onSaveInstanceState
:系统调用onSaveInstanceState
方法,你可以在这个方法中保存需要持久化的数据到Bundle
对象中。Bundle
对象传递给onCreate
方法的savedInstanceState
参数。onCreate
方法中使用savedInstanceState
参数恢复之前保存的状态。示例代码中的onSaveInstanceState
方法保存了一些临时数据:
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
val tempData = "输入的、希望保存的信息。"
outState.putString("data_key", tempData)
}
在活动重新创建时,可以在onCreate
方法中恢复这些数据:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "onCreate")
setContentView(R.layout.activity_main)
//将保存的数据取出来
if (savedInstanceState != null) {
val tempData = savedInstanceState.getString("data_key")
if (tempData != null) {
Log.d(tag, tempData)
}
}
// 其他初始化代码...
}
通过这种方式,你可以确保在活动被销毁和重新创建时,重要的数据不会丢失。