为什么需要注销 OnPreferenceChangeListener?

Why is it necessary to unregister the OnPreferenceChangeListener?

我一直在关注一些教程,它说您必须注销 OnPreferenceChangeListener。 谁能告诉我为什么?

首先,让我们看看注册是如何完成的。

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

我们可以看到SharedPreferences是一个全局对象,因为getApplicationContext()returnssingle/static/global当前进程的应用对象.现在,这里有 2 个你应该取消注册的原因 OnPreferenceChangeListener:

  1. 由于 SharedPreferences 包含一个侦听器列表,如果您想在不同的地方侦听同一事件,将调用第一个侦听器(不是未注册的侦听器)。
  2. 当您注销监听器时,GC 将清理它。想象一下,您反复打开和关闭一个 activity,它创建并注册了一个侦听器对象,然后创建了同一侦听器的一堆实例(您只需要一个)。内存泄漏最终会发生。

注意:我认为这个解释足够好,但这个答案是开放的以供编辑。