• 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的锅。

    阅读原文

  • 相关阅读:
    lua编程之协程介绍
    lua编程之元表与元方法
    设计模式系列之单例模式
    设计模式系列之生成器模式
    设计模式系列之抽象工厂模式
    设计模式系列之原型模式
    设计模式系列之工厂模式
    stl源码分析之hash table
    2018/2019款 MacBookPro 接口失灵的原因及解决方案
    test
  • 原文地址:https://www.cnblogs.com/dmtyoung/p/6673910.html
Copyright © 2020-2023  润新知