2

我有这个Activity(子类AppCompatActivity):

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

现在,当我在正常(即“日”)模式下旋转手机时,我接到了电话,onConfigurationChangedActivity没有重新创建。

但是,当应用程序设置为夜间模式(通过在创建之前调用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)我的)然后我旋转手机时,我首先接到电话但随后也重新创建!当我添加到应该在 my 中忽略的时,这就会消失,但我需要这样做似乎很奇怪。ApplicationActivityonConfigurationChangedActivityuiModeuiModeconfigChangesAndroidManifest.xml

通过查看源代码似乎:

  • onConfigurationChanged打电话getDelegate().onConfigurationChanged(newConfig);AppCompatDelegateImpl.onConfigurationChanged(newConfig)
  • 在那里,applyDayNight()被调用
  • 在那里,getNightMode返回AppCompatDelegateImpl.MODE_NIGHT_YES,这是有道理的,因为这是我设置的。mapNightMode只是返回该值不变。然后updateForNightMode(AppCompatDelegateImpl.MODE_NIGHT_YES)被调用
  • 在那里,newNightMode正确计算为Configuration.UI_MODE_NIGHT_YES currentNightMode(从 中读取mContext.getResources().getConfiguration().uiMode)总是出现Configuration.UI_MODE_NIGHT_NO在每次旋转之后,即使在旋转之前Activity在夜间模式下渲染也是如此。

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

4

1 回答 1

1

似乎是一个错误,将根据此问题在 AppCompat v1.1.0 中修复。

从 AppCompat v1.1.0-alpha03 开始​​,您不再需要uiMode-flagconfigChanges作为解决方法

于 2019-04-25T09:55:53.320 回答