一般情况下,只有activity被销毁后才hi被回收。可是,当系统内存不足时,他会将处于停止状态的activity也回收了。
如果停止状态的activity没被回收,那么再次启动时,将会执行onRestart()方法,然后恢复数据,但是如果被回收后,他会执行onCreate()方法,也就导致,如果这个activity有文本输入框的话,这些数据都会直接消失。

因此为了解决这个问题,Activity提供了一个onSaveInstanceState()回调方法。他在回收前一点会调用该方法。该方法需要一个Bundle参数,也可以用put之类的保存键值对参数。如下代码:

1
2
3
4
5
override fun onSaveInstanceState(outState: Bundle){
super.onSaveInstanceState(outState)
val tempData = "Something you just typed"
outState.putString("data_key",tempData)
}

数据已经保存了,然后恢复的话,需要修改onCreate()的内容

1
2
3
4
5
6
7
8
override fun onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
Log.d(tag,"On Create")
if(savedInstanceState != null){
val tempDta = saveInstanceState.getString("data_key")
Log.d(tag,teamData)
}
}