在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候咱们不但愿如此,就须要作些额外的设置了:html
一、在AndroidMainifest.xml中对应的Activity标签中加入android:configChanges="keyboardHidden|orientation|screenSize"属性,例:android
1 <activity 2 android:name=".view.TestActivity" 3 android:configChanges="keyboardHidden|orientation|screenSize" />
这里是指定当keyboardHidden、orientation、screenSize这三种状态发生改变时,由咱们的程序进行处理,而不是走系统的销毁->重建操做;另外,screenSize是在Api13+要求加上的;ide
二、重写Activity的onConfigurationChanged方法,例:this
1 @Override 2 public void onConfigurationChanged(Configuration newConfig) { 3 super.onConfigurationChanged(newConfig); 4 // 当前为横屏 5 if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 6 7 } 8 // 当前为竖屏 9 else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 10 11 } 12 }
在此方法中,咱们能够根据前面设置的keyboardHidden、orientation、screenSize这三种状态,判断并执行想要的操做,固然什么都不作也能够;spa
就这两步,问题已经解决了,每次切换屏幕方向将不会对Activity的生命周期形成影响,只会走onConfigurationChanged方法。可是!!!我碰到了个很神奇的东西:code
Activity1跳转到了Activity2,而且Activity2已经作了如上处理,当旋转屏幕时,Activity2的确按照预想的执行,可是Log中怎么出现了Activity1的销毁->重建,这提莫就想不通了,通过一番地毯式查找,终于发现缘由在Activity2的Theme属性中设置了<item name="android:windowIsTranslucent">true</item>,透明的Activity2致使了Activity1的重绘,因此去掉就行了,不知道这是否是windowIsTranslucent的一个bug,记得在其余地方好像也碰到过相似的后台Activity被重绘的问题,也是windowIsTranslucent的锅。xml
阅读原文htm