- 说起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*