onCreateonSaveInstanceStateonRestoreInstance一个参数和两个参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了onCreateonSaveInstanceStateonRestoreInstance一个参数和两个参数相关的知识,希望对你有一定的参考价值。


在做android生命周期实验过程中,把 ​​Log.i(TAG, "(1) onCreate()")​​​ 写到了含有两个参数的函数 ​​onSaveInstanceState(Bundle, PersistableBundle)​​ 中,运行过程中并没有输出预想的内容。

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_竖屏


查看函数定义,这个函数是通过调用 ​​onSaveInstanceState(Bundle)​​ 实现的。

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_初始化_02


那么这两个函数有什么区别呢?

看上面图上圈起来的​​"but"​​​,发现​​onSaveInstanceState(Bundle, PersistableBundle)​​​只能被有​​“persistAcrossReboots”​​属性的activity调用。要用这个函数,需要在配置文件中为Activity设置一个属性:

android:persistableMode="persistAcrossReboots"

此后就可以使用含有两个参数的onCreate、onSaveInstanceState、onRestoreInstance函数了。具体参见: ​​bug修复-android中的onCreate两个参数的方法是什么鬼?​​


两种函数使用场景的区别: ​​原文链接​​

  • onCreate(Bundle):当Activity非正常销毁之后,例如手机旋转,内存不足导致的后台自动销毁。
  • onCreate(Bundle, PersistableBundle):手机由于过热,没电或者第三方定制Rom由于卡顿而异常关机的情况,能找回之前前台的数据,实际上是一种数据持久化的Activity。

onSaveInstanceState函数执行条件:

  1. 点击home键回到主页
  2. 点击任务键选择运行其他程序
  3. 从activity中启动一个新的activity时
  4. 按下电源键关闭屏幕(执行onRestoreInstance)
  5. 横竖屏切换(执行onRestoreInstance)

onRestoreInstance函数执行条件:
activity是被系统回收,重新创建activity的情况下调用onRestoreInstance()。如:按下电源键关闭屏幕、横竖屏切换。

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_Android_03


函数执行顺序:

  1. onCreate()初始化Activity —> onStart()生成可视化界面 —> onResume()进入活动状态。
  2. 旋转屏幕后,onPause()进入暂停状态 —> onStop()对用户不可见 —> onSaveInstanceState()保存状态信息 —> (横竖屏切换的时候会由系统先销毁activity,然后再重新创建)onStop()对用户不可见 —> onDestory()销毁活动,释放资源
  3. 再次新建一个activity,由于activity是被系统回收,所以重新创建activity的情况下会调用onRestoreInstance():onCreate()初始化Activity —> onStart()生成可视化界面—> onRestoreInstance()恢复onSaveInstanceState()保存的用户界面信息—> onResume()恢复被onPause()停止的用于界面更新的资源。

Activity事件回调函数的调用顺序:

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_竖屏_04

以上是关于onCreateonSaveInstanceStateonRestoreInstance一个参数和两个参数的主要内容,如果未能解决你的问题,请参考以下文章