android Activity切换屏 生命周期变化问题

    xiaoxiao2021-03-25  91

    最近看到 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”时,切屏不会重新调用各个声明周期。 由此看来系统不同会导致切屏出现不同的反应,查看网上资料发现,好像手机品牌不同也会出现不同的反应。
    转载请注明原文地址: https://ju.6miu.com/read-21764.html

    最新回复(0)