为什么需要取消注册OnPreferenceChangeListener?

时间:2018-05-22 20:34:28

标签: java android sharedpreferences listener

我一直在关注一些教程,并说它必须取消注册OnPreferenceChangeListener。 有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

首先,我们来看看如何完成注册。

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

我们可以看到SharedPreferences是一个全局对象,因为getApplicationContext()返回当前进程的单一/静态/全局应用程序对象。现在,有两个原因可以解除注册OnPreferenceChangeListener

  1. 由于SharedPreferences包含一个侦听器列表,如果您想在不同的地方侦听同一事件,则会调用第一个侦听器(一个未注册的侦听器)。
  2. 取消注册侦听器时,GC会将其清除。想象一下,您反复打开和关闭创建并注册一个侦听器对象的活动,然后创建同一个侦听器的一堆实例(并且您只需要一个)。内存泄漏最终会发生。
  3. 注意:我认为这个解释已经足够好了,但是这个答案可供编辑使用。