对于横竖屏切换的生命周期你真的很了解吗

  • 说起activity的生命周期,我想everyone都能熟练的背诵出来,但是谈到横竖屏切换的时候,真正了解的不多(对于菜鸟来说)。
  • 打开手机
    onCreate–>
    onStart–>
    onResume–>
  • 然后切成横屏呢?
    onSaveInstanceState–>
    onPause–>
    onStop–>
    onDestroy–>
    onCreate–>
    onStart–>
    onRestoreInstanceState–>
    onResume–>
  • 再切回来呢?
    onSaveInstanceState–>
    onPause–>
    onStop–>
    onDestroy–>
    onCreate–>
    onStart–>
    onRestoreInstanceState–>
    onResume–>
    onSaveInstanceState–>
    onPause–>
    onStop–>
    onDestroy–>
    onCreate–>
    onStart–>
    onRestoreInstanceState–>
    onResume–>  
  • 你没看错!,是销毁重建销毁重建!
  • 有时候我们都会遇到这样的需求,旋转屏幕的时候不让走生命周期,至于为什么,请告诉我。。。那么怎么实现呢?先说一种不完全解决的。
      1修改AndroidManifest.xml,把该Activity添加 android:configChanges=”orientation”
     旋转屏幕为横屏:
     onSaveInstanceState–>
    onPause–>
    onStop–>
    onDestroy–>
    onCreate–>
    onStart–>
    onRestoreInstanceState–>
    onResume–>
    没错,依然是一次销毁与重建的过程。
    再旋转为竖屏:
    onSaveInstanceState–>
    onPause–>
    onStop–>
    onDestroy–>
    onCreate–>
    onStart–>
    onRestoreInstanceState–>
    onResume–>
    onConfigurationChanged–>

一次!!!不过多了方法onConfigurationChanged,望文生义:方配置改变监听。
注意
这里一定要声明Android:configChanges属性,该属性规定了我们可以在程序中捕获到的事件类型,多个事件类型用|分隔。如果这里没有orientation,那么我们再程序中是无法捕获到屏幕改变的事件的。

2 完全不走生命周期的解决办法:
android:configChanges=”orientation|keyboardHidden”.
旋转为横屏:
onConfigurationChanged–>
旋转为竖屏:
onConfigurationChanged–>

  • so:
    -1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
    切横屏时会执行一次,切竖屏时会执行两次
    2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调
    用各个生命周期,切横、竖屏时只会执行一次
    3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,
    切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

ok,关于生命,还有以下需要注意的:

*当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
Activity运行时按下HOME键(跟被完全覆盖是一样的):
onSaveInstanceState –> onPause –> onStop onRestart –>onStart—>onResume
Activity未被完全覆盖只是失去焦点:onPause—>onResume*

你可能感兴趣的:(android)