You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:06:02