从横屏ActivityA跳转竖屏ActivityB时ActivityA触发onDestroy如何解决
横屏ActivityA跳转竖屏ActivityB时ActivityA被意外销毁的问题及解决方案
问题描述
存在一个可根据特定条件动态切换横竖屏的ActivityA,和一个固定为竖屏的ActivityB。当ActivityA处于竖屏状态下打开ActivityB时,ActivityA不会被销毁;但当ActivityA处于横屏状态下打开ActivityB时,ActivityA的onDestroy()会被触发,返回时还会重新走onCreate生命周期,需要避免该情况。
ActivityA设置横屏的代码如下:
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
原始清单文件配置如下:
<application android:name=".FirstChat" android:allowBackup="false" android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="ABC" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true" tools:replace="android:icon,android:label,android:theme"> <activity android:name="SplashActivity" android:label="APP" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- Branch URI scheme --> </activity> <activity android:name=".ActivityA" android:launchMode="singleTop"/> <activity android:name=".ActivityB" android:theme="@style/AppTheme.Transparent"/> </application>
解决方案
将ActivityB在manifest中配置的android:theme="@style/AppTheme.Transparent"属性移除后,从横屏ActivityA跳转竖屏ActivityB时,ActivityA不再被销毁重建。
问题原因
该问题由三个条件共同触发:
- ActivityA中通过代码动态设置了横屏方向
- ActivityB通过代码或者manifest设置了竖屏方向
- ActivityB在manifest中配置了主题属性
三者共同作用导致跳转前ActivityA会被销毁重建。
替代方案
如果需要保留ActivityB的对应主题,可以改为在ActivityB的代码中动态设置主题,功能可正常运行。
注意事项
- 该问题仅会在同时满足以下两个条件时出现:为ActivityB在manifest中配置主题、为ActivityA和ActivityB强制设置不同方向。
内容的提问来源于stack exchange,提问作者thebadassdev
相关产品推荐
相关产品推荐

