我正在阅读高效的Android线程,其中说
不使用具有外部类引用的嵌套类,而是使用静态内部类,因为它们仅引用全局类对象而不引用实例对象。这只是缓解了泄漏,因为在执行线程时,静态内部类中对其他实例对象的所有显式引用仍然存在。
但我不清楚为什么它可以减轻泄漏。如果对来自静态内部类的其他实例对象的所有显式引用都是活动的,那么它是否与上述解释相反是内存泄漏的原因?
答案 0 :(得分:0)
非静态内部类将泄漏内存,因为它具有对其外部类的隐式引用。假设您有一个实例保存对内部类对象的引用,这意味着它是活动的,并且此内部类对象包含对其外部类对象的隐式引用,这也意味着外部类对象是活动的,但它可能不会用于事实。所以对于外部类对象,由于内部类的引用,它不会被垃圾收集删除,导致内存泄漏。
您可以从此答案中找到更多详细信息:When exactly is it leak safe to use (anonymous) inner classes?