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

AppCompatDelegate.setDefaultNightMode致部分设备无限循环、闪烁及Activity重启

解决在super.onCreate前设置夜间模式导致的崩溃、闪屏及Activity循环重启问题

问题根源

在super.onCreate(savedInstanceState)调用前执行AppCompatDelegate.setDefaultNightMode()会触发系统的UI模式配置变更,而此时Activity还未完成初始化流程。部分设备的系统对这种提前触发的配置变更兼容性不足,会导致Activity被强制重新创建,进而进入循环重启的死循环,同时伴随界面闪烁甚至直接崩溃。

解决方案

  • 调整调用时机到super.onCreate之后
    将夜间模式设置代码移至super.onCreate执行完成后,确保Activity初始化流程正常完成后再触发配置变更,避免系统异常。示例代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 正确的夜间模式设置时机
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        setContentView(R.layout.activity_main);
        // 后续初始化逻辑
    }
    
  • 全局设置(推荐)
    如果需要所有页面统一应用夜间模式,直接在Application的onCreate方法中配置,这样所有Activity启动前就已完成模式设置,不会触发单个Activity的配置变更。示例代码:

    public class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
        }
    }
    

    注意要在AndroidManifest.xml中声明自定义Application:

    <application
        android:name=".MyApp"
        ...>
        ...
    </application>
    
  • 兼容配置变更(备选方案)
    如果必须在Activity启动时动态切换且避免重启,可在Activity的Manifest标签中添加uiMode配置变更监听,手动处理UI适配,但此方式需自行维护所有UI元素的夜间模式适配,成本较高。示例:

    <activity android:name=".MainActivity"
              android:configChanges="uiMode">
    </activity>
    

    然后重写配置变更方法:

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int nightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
        // 根据nightMode值手动更新UI
        if (nightMode == Configuration.UI_MODE_NIGHT_YES) {
            // 应用夜间样式
        } else {
            // 应用日间样式
        }
    }
    

内容的提问来源于stack exchange,提问作者JR Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:23:29