Java android在移动到其他活动时保留内存

Java android在移动到其他活动时保留内存,java,android,memory,memory-management,Java,Android,Memory,Memory Management,我在我的主要活动(谷歌地图、viewpager等)上做了一些相当繁重的工作。我理解为什么会消耗这么多内存,但当我转到下一个活动时,所有的内存仍在消耗,我不知道为什么。我在加载下一个活动之前“杀死”所有正在消耗内存的对象,然后在下一个活动上执行System.gc()。正如您在屏幕截图中所看到的,内存使用率(如底部显示器所示)没有下降。我拍了一张快照,看看是什么在使用那个内存,在截图中我只扩展了一个线程。我以前的对象(谷歌地图、平铺覆盖等)没有一个仍然是持久的,但是内存消耗没有下降。如果我开始调试第

我在我的主要活动(谷歌地图、viewpager等)上做了一些相当繁重的工作。我理解为什么会消耗这么多内存,但当我转到下一个活动时,所有的内存仍在消耗,我不知道为什么。我在加载下一个活动之前“杀死”所有正在消耗内存的对象,然后在下一个活动上执行System.gc()。正如您在屏幕截图中所看到的,内存使用率(如底部显示器所示)没有下降。我拍了一张快照,看看是什么在使用那个内存,在截图中我只扩展了一个线程。我以前的对象(谷歌地图、平铺覆盖等)没有一个仍然是持久的,但是内存消耗没有下降。如果我开始调试第二个活动,内存使用量是从MainActivity转到第二个活动的1/100

我不确定dispatch():171、DdmServer等是什么,也不确定它们为什么会保留屏幕截图中显示的内存。有什么想法吗?如果我继续使用该应用程序,我最终会遇到OOM,这正是我试图缓解的问题。

“我正在“杀死”在下一个活动加载之前正在消耗内存的所有对象”——在这种情况下,“杀死”到底意味着什么?“然后做一个System.gc()”——这没什么用。“有什么想法吗?”--如果您还没有关闭Instant Run,请尝试关闭它。Instant Run已关闭。通过杀死对象,我的意思是:mLocationManager.removeUpdates(mLocationListener);mLocationListener=null;locationHandler.quit();mTileOverlay.clearTileCache();mTileOverlay.setVisible(false);mTileOverlay.remove();mTileOverlay=null;map.clear();map=null;正如您在屏幕截图中看到的,堆中不存在这些对象引用,但我的内存使用率仍然很高。如果我不“杀死”它们,内存是相同的,它们会被列出。生成一个堆转储并检查它,以确定哪些是保留的:我尝试了几次堆转储,但它似乎从未完成。我在AS中看到了内存监视器中的虚线,但它似乎一直在运行。我需要停止它(类似于开始分配跟踪)还是只需要让它做它该做的事情并保持耐心?它应该自己运行到完成。“我正在“杀死”下一个活动加载之前消耗内存的所有对象”-“杀死”在这种情况下到底意味着什么?“然后做一个System.gc()”——这没什么用。“有什么想法吗?”--如果您还没有关闭Instant Run,请尝试关闭它。Instant Run已关闭。通过杀死对象,我的意思是:mLocationManager.removeUpdates(mLocationListener);mLocationListener=null;locationHandler.quit();mTileOverlay.clearTileCache();mTileOverlay.setVisible(false);mTileOverlay.remove();mTileOverlay=null;map.clear();map=null;正如您在屏幕截图中看到的,堆中不存在这些对象引用,但我的内存使用率仍然很高。如果我不“杀死”它们,内存是相同的,它们会被列出。生成一个堆转储并检查它,以确定哪些是保留的:我尝试了几次堆转储,但它似乎从未完成。我在AS中看到了内存监视器中的虚线,但它似乎一直在运行。我需要停止它(类似于开始分配跟踪)还是只需要让它做它该做的事情并保持耐心?它应该自己运行到完成。