在做Android生命周期实验过程中,把 Log.i(TAG, "(1) onCreate()") 写到了含有两个参数的函数 onSaveInstanceState(Bundle, PersistableBundle) 中,运行过程中并没有输出预想的内容。
查看函数定义,这个函数是通过调用 onSaveInstanceState(Bundle) 实现的。
那么这两个函数有什么区别呢?
看上面图上圈起来的"but",发现onSaveInstanceState(Bundle, PersistableBundle)只能被有“persistAcrossReboots”属性的activity调用。要用这个函数,需要在配置文件中为Activity设置一个属性:
android:persistableMode="persistAcrossReboots" 1
此后就可以使用含有两个参数的onCreate、onSaveInstanceState、onRestoreInstance函数了。具体参见: bug修复-android中的onCreate两个参数的方法是什么鬼?
两种函数使用场景的区别: 原文链接
onCreate(Bundle):当Activity非正常销毁之后,例如手机旋转,内存不足导致的后台自动销毁。onCreate(Bundle, PersistableBundle):手机由于过热,没电或者第三方定制Rom由于卡顿而异常关机的情况,能找回之前前台的数据,实际上是一种数据持久化的Activity。onSaveInstanceState函数执行条件:
点击home键回到主页点击任务键选择运行其他程序从activity中启动一个新的activity时按下电源键关闭屏幕(执行onRestoreInstance)横竖屏切换(执行onRestoreInstance)onRestoreInstance函数执行条件:
activity是被系统回收,重新创建activity的情况下调用onRestoreInstance()。如:按下电源键关闭屏幕、横竖屏切换。
函数执行顺序:
Activity事件回调函数的调用顺序: