Activity.setTheme()之后的Activity.recreate()导致活动泄漏

时间:2019-01-23 22:07:54

标签: android

在我在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())。

0 个答案:

没有答案