Android 活动销毁后,对象仍在内存中

Android 活动销毁后,对象仍在内存中,android,Android,“我的活动”保留一定数量的参照,以便在地图对象中预览来自摄影机的图像。这需要很多内存。我正在使用以下方法监视内存使用情况: Runtime runtime = Runtime.getRuntime(); long allocated = runtime.totalMemory(); long free = runtime.freeMemory(); long used = allocated - free; 当我杀死我的应用程序(返回键)时,活动被破坏。当我再

“我的活动”保留一定数量的参照,以便在地图对象中预览来自摄影机的图像。这需要很多内存。我正在使用以下方法监视内存使用情况:

    Runtime runtime = Runtime.getRuntime();
    long allocated = runtime.totalMemory();
    long free = runtime.freeMemory();
    long used = allocated  - free;
当我杀死我的应用程序(返回键)时,活动被破坏。当我再次启动我的应用程序时,我可以看到内存没有被清除。“使用过的”数字从相同的值开始,然后随着新帧的到来而上升

当我在“Dump HPROF”之后查看“支配者树”时,我可以看到我的两个活动实例,它们都占用了大量内存

当我重写onDestroy()并清除()预览帧贴图对象时,这似乎不会发生

我可能在这里遗漏了一些东西,但我认为在我的活动被销毁后(在垃圾收集过程之后),应该释放所有内存,为什么我必须手动清除()映射?我创建的其他对象似乎不需要这样做

我尝试设置android:launchMode=“singleInstance”,但这似乎没有任何影响


谢谢

为了了解发生了什么,在支配者树中,在您的活动上单击右键,查找GC根目录的路径,并选择排除弱/软/幻影引用的选项。这将使您了解为什么系统无法销毁您的活动(如果您正在泄漏某些内容或其他内容)

垃圾收集器将根据需要在运行时选择的不确定时间运行。应用程序存在时,GC可能运行,也可能不运行

但是,如果在GC运行后对象仍保留在内存中,则意味着您正在泄漏内存。您可以在调试时检查logcat中的日志,查看它何时运行


有关如何检测和修复泄漏的良好教程,请访问谷歌。

您的设备是否出现内存不足异常?Dalvik可能只会在需要的时候回收内存。谢谢!显然,我留下了几个线程仍在运行。