Почему необходимо отменить регистрацию OnPreferenceChangeListener? - PullRequest
0 голосов
/ 22 мая 2018

Я следовал некоторым учебникам, и там говорится, что вы должны отменить регистрацию OnPreferenceChangeListener.Может кто-нибудь сказать мне, почему?

1 Ответ

0 голосов
/ 23 мая 2018

Сначала давайте посмотрим, как выполняется регистрация.

SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
prefs.registerOnSharedPreferenceChangeListener(this);

Мы можем видеть, что SharedPreferences является глобальным объектом, поскольку getApplicationContext() возвращает single / static / global объект приложения текущего процесса.Теперь есть две причины, по которым вы должны отменить регистрацию OnPreferenceChangeListener:

  1. Поскольку SharedPreferences содержит список слушателей, если вы хотите прослушивать одно и то же событие в другом месте, первый слушатель (тот, которыйне был бы незарегистрирован).
  2. Когда вы отмените регистрацию слушателя, GC очистит его.Представьте, что вы неоднократно открываете и закрываете действие, которое создает и регистрирует один объект слушателя, затем создается группа экземпляров одного и того же слушателя (а вам нужен только один).В конечном итоге произойдет утечка памяти.

Примечание: я думаю, что это объяснение достаточно хорошее, но этот ответ открыт для редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...