onSaveInstanceState和onRestoreInstanceState,发现有以下几种情况会调用 onSaveInstanceState
1、当用户按下HOME键时
这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activityA是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activityA,所以onSaveInstanceState一定会被执行
记得屏幕方向切换时确实是会销毁与重建的,但是设置android:configChanges=“orientation|keyboardHidden”时,是不会重新调用的。
然后就看到网上有这些总结:(14年某个博主写的)
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。(执行这个方法,必须设置sdk version 大于等于13.0)
然后,我对”切竖屏执行两次“感到不解,然后又再网上找了资料:(两个说法)
1,当推出键盘的时候,会触发硬件的改变,使手机竖屏变成了横屏2,当推进键盘的时候,合上手机的一刻,触发的是同一样的固件,由于,固件是无法辨别那个是推进,和推出,发出的是一样的信号,然后系统就会认为这是一个横屏改变。
2.实际上,模拟器的翻转是以一个逆时针的方向旋转...你按两次 ctrl + f11实际上是翻转了三次...
但是,我在我的华为荣耀6上,系统为4.4上切换横屏和竖屏,最后的结果是这样的:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行一次。
2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横执行一次再切回竖屏时并不会重新调用。
3.设置Activity的android:configChanges="orientation|keyboardHidden”时,和2反应一样。
4.设置Activity的android:configChanges=“orientation|screeSize”时,切屏不会重新调用各个声明周期。
由此看来系统不同会导致切屏出现不同的反应,查看网上资料发现,好像手机品牌不同也会出现不同的反应。