onSaveInstanceStateonRestoreInstanceState,发现有以下几种情况会调用 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”时,切屏不会重新调用各个声明周期。






由此看来系统不同会导致切屏出现不同的反应,查看网上资料发现,好像手机品牌不同也会出现不同的反应。