2012-11-11 37 views
1

最初,由于托管代码/垃圾回收的性质等原因,我并未对Android中内存泄漏的可能性给予高度关注。我想这可能有点天真。这里的问题:Android内存泄露 - 致命拥抱

说有一个活动 - 我的活动。当OS启动时,在onCreate()中实例化另一个类(MyOtherClass)并保存对其的引用。但是,说MyOtherClass的实例也保持对上下文的引用 - 这也是对MyActivity实例的引用。

现在发生了什么 - 说屏幕旋转。 OS调用onDestroy()活动并删除对MyActivity的旧实例的引用。但是,该活动实例仍具有对MyOtherClass实例的引用,该实例又具有该活动的实例。

那么,我是否认为这两个阶级将会永远相互活着?如果是这样,我想可能的答案是(a)不保留上下文引用,以另一种方式,或(b)在活动onDestroy()中删除任何其他引用,然后它应该会崩溃。

+0

*我是否正确地认为这两个班会保持对方永远活着?* No.(http://stackoverflow.com/questions/427363/garbage-collection-behavior-with-isolated-cyclic-参考文献)。如果是这种情况,那么这些活动每次都会抛出内存泄漏,因为它中的每个View对象(以及更多)都具有对“Activity”本身的引用。 – Luksprog

回答

1

Java不允许循环链接互相保留(在内存中)。但是,如果您已经声明了引用静态或创建的单例风格对象,Java将不会帮助您。

一个好的开始可能是阅读avoiding memory leaks