Activity 当且仅当夜间模式开启时屏幕旋转改变时重新创建

Activity is recreated when screen rotation changes if-and-only-if Night Mode is ON

我有这个 ActivityAppCompatActivity 的子类):

<activity
    android:name=".ui.settings.SettingsActivity"
    android:configChanges="keyboardHidden|smallestScreenSize|orientation|screenSize|screenLayout"
    android:launchMode="singleTask"
    android:parentActivityName=".ui.main.MainActivity" />

现在,当我在正常(即 "Day")模式下旋转 phone 时,我收到了对 onConfigurationChanged 的调用,但没有重新创建 Activity .

但是,当应用程序设置为夜间模式时(通过在创建 Activity 之前在我的 Application 中调用 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES))并且我 然后 旋转 phone,我首先接到对 onConfigurationChanged 的调用,但随后 Activity 重新创建,即使 uiMode 一点都没变!当我将 uiMode 添加到应该在我的 AndroidManifest.xml 中忽略的 configChanges 时,这消失了,但我需要这样做似乎很奇怪。

通过查看源代码似乎是:

那么,这里发生了什么,我可以做些什么来获得更一致的行为? (在屏幕旋转后重新创建(或不创建)Activity,无论应用是否处于夜间模式。)

似乎是一个错误,将根据此 issue.

在 AppCompat v1.1.0 中修复

从 AppCompat v1.1.0-alpha03 开始​​,您不再需要 configChanges 中的 uiMode 标记作为解决方法