在我在Android 9模拟器上对其进行测试之前,我几乎要为我的应用发布新更新。当无缝更改主题时(之后是setTheme()和recreate()),该应用程序会为每个活动添加一个活动。这会堆积:1-> 2-> 4-> 8-> 16-> ...,因此应用程序在很短的时间后会变得非常慢(如果您不断快速更改主题)
如何详细更改主题?
如果用户通过MainActivity
进入设置菜单,它将启动SettingsActivity
,将SettingsFragment
设置为其R.android.content
。用户可以在SettingsFragment
中选择ListPreference
中的主题,如果发生更改,主题将重新启动其活动(SettingsActivity
)并通过MainActivity
通知OnSharedPreferenceChangeListener
也可以使用recreate()
重新创建自己。用伪代码:
/* In SettingsFragment */
ListPreference themes = ...
themes.onPreferenceChange() -> getActivity().recreate(); // Recreates SettingsActivity
/* In MainActivity */
recreate();
如前所述,此行为仅发生在Android 9上。在Android 8.1或更低版本上,MainActivity
甚至没有被销毁,正如我通过Logcat所看到的那样(它不会触发onDestroy())。>