我有这个Activity(子类AppCompatActivity):
<activity
android:name=".ui.settings.SettingsActivity"
android:configChanges="keyboardHidden|smallestScreenSize|orientation|screenSize|screenLayout"
android:launchMode="singleTask"
android:parentActivityName=".ui.main.MainActivity" />
现在,当我在正常(即“日”)模式下旋转手机时,我接到了电话,onConfigurationChanged但Activity没有重新创建。
但是,当应用程序设置为夜间模式(通过在创建之前调用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(无论应用程序是否处于夜间模式,在屏幕旋转后重新创建(或不) 。)