Сначала давайте посмотрим, как выполняется регистрация.
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
prefs.registerOnSharedPreferenceChangeListener(this);
Мы можем видеть, что SharedPreferences
является глобальным объектом, поскольку getApplicationContext()
возвращает single / static / global объект приложения текущего процесса.Теперь есть две причины, по которым вы должны отменить регистрацию OnPreferenceChangeListener
:
- Поскольку
SharedPreferences
содержит список слушателей, если вы хотите прослушивать одно и то же событие в другом месте, первый слушатель (тот, которыйне был бы незарегистрирован). - Когда вы отмените регистрацию слушателя, GC очистит его.Представьте, что вы неоднократно открываете и закрываете действие, которое создает и регистрирует один объект слушателя, затем создается группа экземпляров одного и того же слушателя (а вам нужен только один).В конечном итоге произойдет утечка памяти.
Примечание: я думаю, что это объяснение достаточно хорошее, но этот ответ открыт для редактирования.