我有这个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 中忽略的时,这就会消失,但我需要这样做似乎很奇怪。Application
Activity
onConfigurationChanged
Activity
uiMode
uiMode
configChanges
AndroidManifest.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
(无论应用程序是否处于夜间模式,在屏幕旋转后重新创建(或不) 。)