在android

时间:2016-03-24 07:49:03

标签: android performance memory

我有一个应用程序,我正面临性能问题。 App很多。我试图监视我的android工作室中的内存分配部分,我发现了我的应用程序崩溃的原因。我的应用程序从19MB开始。我经历了不同的活动,然后在我的应用程序中按回按钮,我正在呼叫finish()。我意识到内存已分配给我的应用程序,但即使在调用完成后,也没有内存被释放。我显然在做一些大错,但是有人可能列出了为什么会发生这种情况的原因。我真的很感激。哦,是的,我的应用程序达到了72 MB。记忆永远不会被解除分配。

2 个答案:

答案 0 :(得分:1)

你检查过内存泄漏了吗? Android会杀死process,但components分配的内存可能无法被GC释放。可能由于持有组件或其成员的参考而发生。

注意:Android总是会杀死进程组件。我们的工作是确保他们收集垃圾(是的,GC自己做,但如果我们持有对任何组件的引用,它就不会收集垃圾)。

编辑1:您可以像详细here一样进行调查。或者你可以使用这个真棒library by square

编辑2:例如,您在view中对async task的保留引用,以便您可以在task完成时更新它。但是当task仍在运行时,activity会因屏幕旋转而被破坏。在这里,android会杀死foreground process,但GC无法收集已分配的内存,因为async task持有view的引用,因此活动也无法获取收集是因为view与其activity绑定。然后,该活动的所有成员也将无法收集。

答案 1 :(得分:0)

好吧,我试图看看我是否犯了任何错误,但遗憾的是找不到它,但我在调用完之后尝试了这个,并且释放了大量空间。

Runtime.getRuntime().gc();

但我认为gc是自动调用的,所以如果我错了可以有人告诉我,如果你自己调用gc有任何危险,如果不好,那么这条线对我有效:)