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

在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候我们不希望如此,就需要做些额外的设置了:

 

1、在AndroidMainifest.xml中对应的Activity标签中加入android:configChanges="keyboardHidden|orientation|screenSize"属性例:

1 <activity
2     android:name=".view.TestActivity"
3     android:configChanges="keyboardHidden|orientation|screenSize" />

这里是指定当keyboardHidden、orientation、screenSize这三种状态发生改变时,由我们的程序进行处理,而不是走系统的销毁->重建操作;另外,screenSize是在Api13+要求加上的;

 

2、重写Activity的onConfigurationChanged方法,例:

 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这三种状态,判断并执行想要的操作,当然什么都不做也可以;

 

就这两步,问题已经解决了,每次切换屏幕方向将不会对Activity的生命周期造成影响,只会走onConfigurationChanged方法。但是!!!我碰到了个很神奇的东西:

Activity1跳转到了Activity2,并且Activity2已经做了如上处理,当旋转屏幕时,Activity2的确按照预想的执行,但是Log中怎么出现了Activity1的销毁->重建,这提莫就想不通了,经过一番地毯式查找,终于发现原因在Activity2的Theme属性中设置了<item name="android:windowIsTranslucent">true</item>,透明的Activity2导致了Activity1的重绘,所以去掉就好了,不知道这是不是windowIsTranslucent的一个bug,记得在其他地方好像也碰到过类似的后台Activity被重绘的问题,也是windowIsTranslucent的锅。

 

阅读原文

posted @ 2017-04-06 16:06  DMTyoung  阅读(2760)  评论(0编辑  收藏  举报