安卓基础-Android横竖屏切换总结

昨天看网上一个关于横竖屏切换的总结,里面说不设置activity的configChanges时,在竖屏切换横屏时会进行两次生命周期的加载,看到这个就很疑惑,为什么两次呢?结果试了一下,大相径庭。

设备 samsung-galaxy-mega2

  • 不设置configChanges时,从横屏切换到竖屏时的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

很明显,是一次activity的销毁和重建,onPause之后便进行了onSaveInstanceState 而onResume之前也进行了onRestoreInstanceState。很正常

  • 不设置configChanges时,从竖屏切换到横屏时的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

和1状态一毛一样。并没有走两次。

  • 设置configChanges = “orientation”时,从横屏切换到竖屏时的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

也是一毛一样

  • 设置configChanges = “orientation”时,从竖屏切换到横屏的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

也是一毛一样

这就代表着configChanges = “orientation”没有任何作用

  • 设置configChanges = “orientation|keyboardHidden”时,从横屏切换到竖屏 && 竖屏切换到横屏的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

依旧一毛一样

  • 设置configChanges = “orientation|keyboardHidden|screensize”时,从横屏切换到竖屏 && 竖屏切换到横屏的生命周期

只走了onConfigurationChanged这一个方法。

  • 只设置configChanges = “screensize” || 只设置configChanges = “orientation”,从横屏切换到竖屏 || 竖屏切换到横屏的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

代表只设置一个是无效的

  • 只设置configChanges = “keyboardHidden|screensize”,从横屏切换到竖屏 && 竖屏切换到横屏的生命周期

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

仍旧无效

  • 只设置configChanges = “orientation|screensize”,从横屏切换到竖屏 || 竖屏切换到横屏的生命周期

只走了onConfigurationChanged这一个方法。

总结

若activity的configChanges没有设置,或者设置却没有同时设置 orientation 和 screensize时,会导致activity销毁重建。

而若是设置了configChanges = “orientation|screensize”,则不会销毁,只会走onConfigurationChanged。

和网上的内容大相径庭。若是偏信网上的内容,这部分的知识点就是错误的理解。

心得

实践出真知!!!!!不能过于相信网上的内容,要自己动手实践一下。