您当前的位置: 首页 > 

蓝不蓝编程

暂无认证

  • 2浏览

    0关注

    706博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

安卓onSaveInstanceState和onRestoreInstanceState触发时机

蓝不蓝编程 发布时间:2019-04-12 17:49:33 ,浏览量:2

简要介绍

很多介绍安卓生命周期的文章,都没有介绍到onSaveInstanceState和onRestoreInstanceState这两个函数,本文专门来介绍一下。

onSaveInstanceState

onSaveInstanceState按照官方解释,是当activity被临时销毁时才执行的。 原文:invoked when the activity may be temporarily destroyed, save the instance state here 但是实际onSaveInstanceState什么时候执行呢? 根据我验证的情况,只要onStop执行,它就会执行。场景包括:应用退到后台、跳转到其他activity。如果实际有出入,可以拍砖哦。

onRestoreInstanceState

onRestoreInstanceState用于恢复之前临时保存的activity状态。而这个又什么时候执行呢?网上介绍这个比较少。 触发时机:

  1. activity被回收 要模拟资源缺少时系统自动回收是比较困难的,不过可以在开发者选项里打开“不保留活动(Don’t keep activities)”。当activity被切换到后台或者启动新的activity后,原有activity就会被销毁,再次回来时,就会执行onRestoreInstanceState了。
  2. 屏幕旋转、改变系统语言、字体大小变化 附赠一点知识,如果要防止这些系统变化导致activity重建,可以在manifest增加activity是,设置android:configChanges属性,属性可选值参考 关于android:configChanges的属性 ,样例如下:

使用场景

因为在上面列的场景下,activity会被销毁重建,有时需要保留界面上的数据,重建时恢复上去。那如何做呢?

  1. onSaveInstanceState中往Bundle里添加数据,下面样例是放了一个字符串jerry,并且指定了key为name。
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("name","jerry")
}
  1. 在onCreate方法中取出来(注意要判空)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    log(tag,savedInstanceState?.getString("key").toString())
}

有意思的是,这个玩法中好像没onRestoreInstanceState啥事,它只是充当了二传手,把onSaveInstanceState保存的数据传递给了onCreate。自己压根不必露面(大老板也都这样,哈哈)。

安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061 点击关注专栏,查看最新技术分享 更多技术总结好文,请关注:「程序园中猿」

关注
打赏
1639405877
查看更多评论
立即登录/注册

微信扫码登录

0.0432s