Android:使用ArrayAdapter的强引用循环

时间:2015-05-02 07:51:46

标签: android android-listview android-arrayadapter

在我尝试为我的应用程序中的所有适配器抽象出常用功能时,我在查看困扰我的ArrayAdapter代码时遇到了一些问题。

据我所知,使用ListView的常见模式如下:

  1. 在XML中创建ListView,它将在Activity中有一个引用。
  2. 创建一个ArrayAdapter并将Activity作为上下文。
  3. 在ListView中设置ArrayAdapter。
  4. 一瞥代码就会发现ListView存储了对适配器的强引用,而ArrayAdapter存储了对上下文的强引用,即我的Activity。这会产生一个强大的参考周期,这就是困扰我的一点。

    我知道可以通过在onDestroy中将ListView引用设置为null来解决这个问题。但是在使用导致它的相同技术时,任何教程都不会讨论这个问题。

    我的问题是我在这里遗漏了什么或者是常识吗?

1 个答案:

答案 0 :(得分:2)

ARC 是Java / Android正在使用的真实GC(垃圾收集器),因此它们具有不同的行为。其中一个行为是,对于ARC,开发人员可以打破任何循环引用以防止内存泄漏,但对于Android来说这是一个非问题,其GC可以在运行时自动检测这些引用并处理这些适当的对象。

总是很了解平台如何在平台下工作,这些信息可以帮助您区分两者并获得对GC的理解: