考虑到托管代码/垃圾回收等的性质,最初我并未对Android中内存泄漏的可能性给予太多关注。我想这可能有点天真。这是问题:
说有活动 - MyActivity。当OS启动它时,在其onCreate()中实例化另一个类(MyOtherClass)并保持对它的引用。但是,MyOtherClass的实例也会保留对上下文的引用 - 这也是对MyActivity实例的引用。
现在发生了一些事情 - 说屏幕旋转了。操作系统调用活动onDestroy()并删除对旧的MyActivity实例的引用。但是,该活动实例仍然引用了MyOtherClass的实例,而该实例又具有该活动的实例。
所以,我是否正确地认为这两个班级将会永远保持活着?
如果是这样,我猜可能的答案是:(a)不保留上下文引用,以另一种方式获取,或者(b)在活动onDestroy()中删除它对其他任何引用的所有引用,然后它应该全部应该只是崩溃。
答案 0 :(得分:1)
Java不允许循环链接使彼此保持活动(在内存中)。但是,如果您声明了引用静态或创建了单例样式对象,那么Java将无法帮助您。
一个好的开始可能是阅读avoiding memory leaks。