默認情況下,Acticity 會自動保存數據,但在橫豎屏切換的時候,或者內存不足被系統干掉的時候,需要手動的保存與回復一些必要的數據。
package com.psj.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
val tag : String by lazy {
MainActivity::class.java.simpleName
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i(tag,"onCreate")
setContentView(R.layout.activity_main)
Log.i(tag,"savedInstanceState == null ? " + (savedInstanceState == null))
savedInstanceState?.getString("data")?.let {
Log.i(tag,"保存的數據為: " + it)
Toast.makeText(MainActivity@this,it,Toast.LENGTH_SHORT).show()
}
}
override fun onStop() {
super.onStop()
Log.i(tag,"onStop")
}
override fun onPause() {
super.onPause()
Log.i(tag,"onPause")
}
// 在Activity的 onStop 方法被調用之前肯定會被調用
// 如果用戶自己手動按返回按鍵導致銷毀Acticity,那么保存的數據無效
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Log.i(tag,"onSaveInstanceState")
//將數據保存在 outState 對象了里面
outState.putString("data", "這是我保存的數據")
}
}