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; mScreen = screen;
Preference pref = screen.findPreference(KEY); Preference pref = screen.findPreference(KEY);
if (pref != null) { 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( private final Uri ZEN_MODE_DURATION_URI = Settings.Secure.getUriFor(
Settings.Secure.ZEN_DURATION); Settings.Secure.ZEN_DURATION);
private final Preference mPreference; private Preference mPreference;
public SettingObserver(Preference preference) { public SettingObserver() {
super(new Handler()); super(new Handler());
}
public void setPreference(Preference preference) {
mPreference = preference; mPreference = preference;
} }