Android切换横竖屏不销毁前台Activity,也不影响后台Activity

在切换屏幕方向的时候,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

相关文章
相关标签/搜索