RegisterOnSharedPreferenceChangeListener () подходит для сравнения

В некотором коде, который я поддерживаю, я заметил два разных способа регистрации общего прослушивателя изменений:

(1) Прямой подход, в котором класс, содержащий зарегистрированную функцию-член, реализует SharedPreferences.OnSharedPreferenceChangeListener .

preferences.registerOnSharedPreferenceChangeListener(mImageView); 

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

 SharedPreferences.OnSharedPreferenceChangeListener mPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() { public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { // do here what's needed to do } }; .... preferences.registerOnSharedPreferenceChangeListener(mPreferencesListener); 

Оба работают хорошо, но теперь мне интересно: один подход предпочтительнее другого?

Существуют ли обстоятельства, при которых фактически можно использовать только один из этих двух подходов?

Это связано с реализацией, с точки зрения ремонтопригодности некоторые люди могут найти тот или иной способ лучше для своих намерений, некоторые люди просто продолжают думать о удобочитаемости, естественной медицине и т. Д.

С другой стороны, конечно, вы можете предотвратить любые проблемы с утечкой и сбором мусора, заявив, что если созданный mPreferencesListener обращается к любому из методов вмещающего экземпляра, которые вы можете запускать в некоторых проблемах, в качестве хорошего гражданина вы должны отменить регистрацию своих слушателей после того, как вы знаете Что вы не будете использовать их (например, onPause, onDestroy и т. Д.) И выбираете статические внутренние классы вместо внутренних классов членов и будьте осторожны, если анонимные и локальные внутренние кланы получают доступ к экземплярам методов / свойств экземпляра.

Наконец, стоит упомянуть, что пока SharedPreferencesImpl использует WeakHashMap для своих слушателей.

Intereting Posts
Ant после обновления инструментов Android SDK до версии 14 Как использовать команду adb для push-файла на устройстве без SD-карты Всплывающее запоминающее устройство Android USB всплывает API Android Maps версии 1 до версии 2 Разница между Spannable и String в android Как я могу показать мягкую клавиатуру в веб-браузере с подключенным USB-HID-устройством при нажатии кнопки и фокусировкой ввода? Настройка фонового изображения для относительной компоновки? Ошибка com.facebook.widget.loginbutton в xml Actionmenu: Показать заголовок И значок Получить активность после startActivity (Intent i) Параметрированный запрос вызывает IllegalArgumentException: невозможно связать аргумент Отображение анимированного изображения PNG для моего макета в android с использованием XML Целевая аудитория Android изменилась после обновления платформы cordova Не удается найти приложение в Android Market В службе ProjectScopeServices отсутствует проблема с настройкой типа фабрики