当我在 PreferenceScreen 中切换夜间模式时,我之前的屏幕不会触发 onRestart

When i switch the night mode in my PreferenceScreen, my previous screen won't proc onRestart

所以我有带 PreferenceScreen 的 SettingsActivity,所以我可以选择我的 theme/font 设置,以及夜间模式开关。

我有主题加载函数,我在每个 activity 的 onCreate 开始时调用它。 因为在我们更改设置之前可能会创建一个 activity,所以我在 onRestart 中放置了一个 recreate(),这样当 activity 被重新创建时我的函数将加载 Theme()。

问题是,在每次更改设置时,当我从 MainActivity 移动到 SettingsActivity 并对首选项设置进行更改时,会调用 onStop() 并且在我 return 从 SettingActivity 返回到 MainActivity 之后, onRestart() 应该被调用。

我的问题是,如果我切换我的夜间模式选项,我更改的任何其他选项都不会立即保留 MainActivity,因为出于某种原因,即使离开 activity 我的 onStop() 被调用,当我 return 回到它时,onRestart() 没有被调用,我不知道为什么。

通常的生命周期说,如果 activity 停止,它应该在 return 返回时调用 onRestart。 我不知道为什么切换我的夜间模式会改变这一点。 如果我移动到另一个 activity 然后回到那个,它会像往常一样触发 onRestart,它不仅在更改夜间模式后立即发生。

由于某种原因,这只发生在 API 27 岁及以下。

有人知道原因吗?

我通过将它放在 Main 的 onPause() 中解决了这个问题 Activity:

override fun onPause() {
        super.onPause()
        while (rCreate == 0) {
            if (Build.VERSION.SDK_INT < 28) {
                recreate()
            }
            rCreate = 1
        }
    }

同时声明一个全局变量:

var rCreate: Int = 0

这确保 activity 在夜间模式切换后重新创建,进而触发 onStop(),返回视图后又触发 onRestart(),这仅发生在 API 27 或更低。

如果谁有更好的解决方案,欢迎交流。