activity重建后临时数据的恢复


正常启动生命周期

2022-10-13 15:06:22.779 15547-15547/com.wuhongru.workman E/error: onCreate
2022-10-13 15:06:22.834 15547-15547/com.wuhongru.workman E/error: onStart
2022-10-13 15:06:22.836 15547-15547/com.wuhongru.workman E/error: onResume

启动后跳转到其他页面 并且activity在后台被销毁

2022-10-13 15:06:22.779 15547-15547/com.wuhongru.workman E/error: onCreate
2022-10-13 15:06:22.834 15547-15547/com.wuhongru.workman E/error: onStart
2022-10-13 15:06:22.836 15547-15547/com.wuhongru.workman E/error: onResume
2022-10-13 15:07:30.618 15547-15547/com.wuhongru.workman E/error: onSaveInstanceState
2022-10-13 15:07:30.641 15547-15547/com.wuhongru.workman E/error: onDestroy

启动后跳转到其他页面 activity被销毁 返回到销毁后重建的activity

2022-10-13 15:06:22.779 15547-15547/com.wuhongru.workman E/error: onCreate
2022-10-13 15:06:22.834 15547-15547/com.wuhongru.workman E/error: onStart
2022-10-13 15:06:22.836 15547-15547/com.wuhongru.workman E/error: onResume
2022-10-13 15:07:30.618 15547-15547/com.wuhongru.workman E/error: onSaveInstanceState
2022-10-13 15:07:30.641 15547-15547/com.wuhongru.workman E/error: onDestroy
2022-10-13 15:09:02.936 15547-15547/com.wuhongru.workman E/error: onCreate
2022-10-13 15:09:02.982 15547-15547/com.wuhongru.workman E/error: onStart
2022-10-13 15:09:02.983 15547-15547/com.wuhongru.workman E/error: onRestoreInstanceState
2022-10-13 15:09:02.986 15547-15547/com.wuhongru.workman E/error: onResume

重点关注

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
}

一套简单流程

private lateinit var mBinding: ActivityMainBinding
private val mModel: MyViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    mBinding.edit.addTextChangedListener {
        mModel.editString.postValue(it.toString())
    }

    if (savedInstanceState != null) {
        mBinding.edit.setText(savedInstanceState.getString("edit"))
    }
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("edit", mModel.editString.value)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
mBinding.edit.setText(savedInstanceState.getString("edit"))
}

关于 onSaveInstanceState(outState: Bundle)

onSaveInstanceState() 方法 在activity意外死亡 如内存不足 按下Home键的时候会调用 但是在用户手动销毁 如按下返回键的时候并不会调用。

总结为 系统销毁调用 用户主观销毁不调用

关于 onRestoreInstanceState(savedInstanceState: Bundle)

onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的。


文章作者: Lao Wu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lao Wu !
评论
  目录