Android 12如何防止更换手机壁纸时Activity重启?
根因说明
Android 12 引入的 Material You 动态配色特性会在用户更换壁纸后提取壁纸主色更新系统全局配色,该操作会触发应用配置变更,系统默认会销毁并重建前台Activity以加载适配新配色的资源,就是你遇到的重启现象。
可行解决方案
方案1:拦截对应配置变更,禁止系统自动重建Activity
在你的AndroidManifest.xml中,给需要屏蔽重启的Activity添加configChanges配置,声明由应用自行处理相关配置变更:
<activity android:name=".你对应的Activity类名" android:configChanges="uiMode|colorMode|screenLayout|screenSize|smallestScreenSize|orientation" />
添加该配置后,系统不会再自动销毁重建Activity,相关配置变更会回调Activity的onConfigurationChanged方法,如果你不需要针对配置变更调整页面内容,直接空实现该方法即可;如果有部分视图需要适配新配置,可在该方法内手动更新对应资源。
方案2:关闭应用的Material You动态配色适配
如果你的应用不需要跟随系统动态配色变化,直接禁用动态配色特性即可从根源避免该类配置变更触发的重启:
在res/values-v31目录下的应用主题样式中添加以下配置:
<style name="你的应用主题名" parent="你使用的主题父类"> <!-- 关闭动态颜色适配 --> <item name="android:dynamicColor">false</item> <!-- 其他原有主题配置 --> </style>
适配后应用会始终使用预设的主题色,不会随壁纸更换变更配色,也就不会触发对应的Activity重启。
注意事项
- 采用
configChanges拦截方案时,要确认你的应用不需要系统自动加载对应配置的资源(比如不同主题下的色值、drawable),如果有局部适配需求,必须手动在onConfigurationChanged中更新对应控件的资源。 - 关闭动态配色的方案仅适用于不需要适配Material You动态色的应用,启用后应用不会响应系统全局配色变更。
内容的提问来源于stack exchange,提问作者q126y
相关产品推荐
相关产品推荐

