横竖屏切换

getRequestOrientation()  或者 getResource().getConfiguration().orientation 可以得到当前activity是处于横屏还是竖屏

setRequestOrientation()    可以设置当前的activity的横竖屏

例:如果是横屏 设置为竖屏

if(getRequestOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANSCAPE){

           setRequestOrientation(ActvitiyInfo.SCREEN_ORIENTATION_PORTRAIT);

}

if(getResource().getConfiguration().orientation == Configuration.ORIENTATION_LANCSCAPE){

}

可以在activity的属性 android:screenOrientation=""  中设置当前activity的固定为横屏或者竖屏, 值可取 landscape|portrait

横竖屏切换的生命周期:

当前Activity产生事件弹出Toast和AlertDialog的时候Activity的生命
周期不会有改变

以下内容为转载内容:

1、新建一个Activity,并把各个生命周期打印出来

2、运行Activity,得到如下信息

onCreate-->
onStart-->
onResume-->

3、按crtl+f12切换成横屏时

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

4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log

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

5、修改AndroidManifest.xml,把该Activity添加
android:configChanges="orientation",执行步骤3

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

6、再执行步骤4,发现不会再打印相同信息,但多打印了一行onConfigChanged

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

7、把步骤5的android:configChanges="orientation" 改成
android:configChanges="orientation|keyboardHidden",执行步骤3,就只打印
onConfigChanged

onConfigurationChanged-->

8、执行步骤4

onConfigurationChanged-->
onConfigurationChanged-->

总结:

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调
用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

但自己测试后结果为:  切换横竖屏只走一遍生命周期: onSaveInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState()->onResume()  而不是当横屏切换到竖屏走两遍 ,不知道怎么回事

                              当设置activity  configChanges="orientation" 或者设置 configChanges="orientation|keyboardHidden"时生命周期为:

                               无论是横屏切换竖屏或者竖屏切换横屏都只走一遍onConfigurationChanges(),不走其它生命周期

原文地址:https://www.cnblogs.com/lianghui66/p/2749816.html