У меня есть 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)
в моем Application
до создания Activity
) и I , затем , поверните телефон, сначала мне позвонят на 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
после поворота экрана, независимо от того, находится приложение в ночном режиме или нет.)