小编x-d*_*vel的帖子

应用程序恢复/重新启动时的 Android 手动暗模式会导致应用程序主题无法正常工作

我在手动管理暗模式时遇到了一个大问题。

该应用程序如何工作

在应用程序启动时,第一个活动会在 SharedPreferences 中检查用户是否选择启用深色模式或保持浅色模式(默认),然后根据用户首选项进行相应更改:

编辑:正如 CSmith 所要求的,这是在活动中调用主题选择器的时间

//FirstActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AppThemeSelector.checkAndShowTheme(getApplicationContext());
...
Run Code Online (Sandbox Code Playgroud)

这是主题选择器方法

//AppThemeSelector.class
    public static void checkAndShowTheme(Context context){
        SharedPreferences sharedPreferences = context.getSharedPreferences(
                PreferencesValues.SHARED_DARKMODE_MAP, Context.MODE_PRIVATE
        );

        boolean darkMode = sharedPreferences.getBoolean(PreferencesValues.SHARED_DARKMODE_ENABLED, false);

        if(darkMode){
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        }else{
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        }
    }
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,每当它启动时,它都会使用用户选择的主题设置主题,并且一切正常。

问题发生在哪里

显然,这个问题似乎只发生在我的小米 Mi A2 Lite (Android 10) 上,因为我已经在 Pixel 2 (Android 11) 和模拟器 (Android 10) 上进行了测试,当应用程序从最近的应用程序恢复时,一切正常普通的。

问题

重现我的问题的一致方法是:假设我的应用程序设置为手动灯光模式,而我的系统处于黑暗模式。我打开应用程序(留在家庭活动或去其他活动会导致相同的问题),然后进入系统设置并更改系统语言。

当我从最近的应用程序选项卡重新打开应用程序时,应用程序似乎尝试重新启动,但中途崩溃了(不确定这一点,因为 logcat 没有显示任何有关崩溃的信息,应用程序也没有显示有关崩溃的任何对话框),并且当它启动时,它会自动设置它的主题到系统主题(所以在我的示例中它进入黑暗模式)。

目前的问题是,一些本来应该在深色模式下看到的文本现在有了浅色模式主题,使它们与黑色背景融为一体;应用程序中用于从深色模式更改为浅色模式的开关保持正确的设置(显示未启用深色模式),但应用程序处于深色模式。如果应用程序重新启动,一切都会恢复正常,并且应用程序会正确显示在浅色主题中。

当应用程序长时间停留在后台时,我无法重现该问题,但我认为它也可能发生。

android android-theme android-dark-theme android-darkmode

4
推荐指数
1
解决办法
3262
查看次数