Settings observer fail to unregister.

Zen mode change will call displayPreference() and create a new SettingsObserver, then the old Observer object will have no opportunity to be unregistered. After too much new SettingsObserver creatd in Monkey test, memory might leak.

Bug 176206489

Change-Id: I3bccec281da492299bbf755f86df7844a31223c5
This commit is contained in:
andrew.gong
2020-12-24 15:32:49 +08:00
parent a2e406ed85
commit bf477db855

View File

@@ -84,7 +84,10 @@ abstract public class AbstractZenModePreferenceController extends
mScreen = screen;
Preference pref = screen.findPreference(KEY);
if (pref != null) {
mSettingObserver = new SettingObserver(pref);
if (mSettingObserver == null) {
mSettingObserver = new SettingObserver();
}
mSettingObserver.setPreference(pref);
}
}
@@ -128,10 +131,13 @@ abstract public class AbstractZenModePreferenceController extends
private final Uri ZEN_MODE_DURATION_URI = Settings.Secure.getUriFor(
Settings.Secure.ZEN_DURATION);
private final Preference mPreference;
private Preference mPreference;
public SettingObserver(Preference preference) {
public SettingObserver() {
super(new Handler());
}
public void setPreference(Preference preference) {
mPreference = preference;
}