我刚看了Google IO的“内存管理 for Android”视频。幻灯片可以在这里找到http://dubroy.com/memory_management_for_android_apps.pdf,内存泄漏例子在第36页。
我不明白为什么方向改变后会导致内存泄漏。我理解泄漏是一个内部类并引用外部类。同时我也理解静态变量“leak”引用“Leaky”对象,因此引用整个activity。我认为这很特别,因为它有一个静态关键字。静态变量具有一定的内存,可能不会被垃圾回收(至少在应用程序运行时)?!?
那么,在方向改变时发生了什么?创建了一个新的活动实例,调用了activities的onCreate
。leak==null
是false。泄漏仍然指向“旧”活动。这是一种泄漏。旧活动无法被回收,对吧?
为什么每次方向改变都会增加内存使用?根据我的(错误)理解,我会假设只有第一个活动无法被垃圾回收。由于它们没有被静态变量“泄漏”引用,因此可以回收会发生方向改变而创建的其他活动。
然而..显然..我是完全错误的!