我制作了一个简单的应用来测试Android的内存。 它有两个活动,A和B. A是一个简单的Activity,带有一个启动B的按钮。 B由一个非常大的图像组成(jpg,mdpi为1024x768像素)
当我使用DDMS监控此过程时,当从A移动到B时,堆会按预期上升。
当我按下B上的(硬件或软件,使用super.onBackPressed()
)按钮并再次进入A时,即使在调用垃圾收集之后,堆也不会再次收缩。这是预期的吗? B占用的内存是否会在整个过程中释放出来?
答案 0 :(得分:3)
onBackPressed()只需从 BackStack 弹出您的B活动,然后您的活动就不再可见(onStop()已调用),但它是过程没有被杀死,直到Os需要它的记忆
答案 1 :(得分:1)
请注意垃圾收集器的工作原理是“ nondeterministic ”。特别是,即使对垃圾收集器的调用也不意味着内存完全被释放。只有在请求更多内存时才能保证释放内存。