Активность воссоздается, когда поворот экрана меняется, если включен только ночной режим. - PullRequest
1 голос
/ 25 апреля 2019

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

1 Ответ

1 голос
/ 25 апреля 2019

Кажется, что это ошибка и будет исправлена ​​в AppCompat v1.1.0 в соответствии с этой проблемой .

Начиная с AppCompat v1.1.0-alpha03, вам больше не нужен флаг uiMode в configChanges в качестве обходного пути

...