【问题标题】:Android heap growing when restarting application重新启动应用程序时Android堆增长
【发布时间】:2012-08-10 03:08:28
【问题描述】:

您好,我已经阅读了与在 android 中增长堆有关的错误

08-13 21:46:22.382: I/dalvikvm-heap(10859): Grow heap (frag case) to 20.578MB for 2400016-byte allocation

下面是我反复退出我的应用程序并一遍又一遍地重新启动它的日志(过滤)。如您所见,每次重新启动时堆都会增长。这个怎么可能?完全退出时不应该清除应用程序堆吗?

如果我对代码进行任何更改并重新启动应用程序,堆将重置为其原始值。这种行为正常吗?

每次我在应用程序中切换活动时,也会发生相同的堆增长。我在andengine中编写了我的应用程序。我得到了高达 80MB 的堆,并且随着堆的增大,加载变得更慢。

I/dalvikvm-heap(13094): Grow heap (frag case) to 13.198MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.354MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.350MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.350MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.406MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.268MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.265MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 13.264MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 14.818MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 14.814MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 14.813MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 14.813MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 16.421MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 16.427MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 16.426MB for 2400016-byte allocation
I/dalvikvm-heap(13094): Grow heap (frag case) to 16.426MB for 2400016-byte allocation
//**-Not A log message: here i simply changed a variables name and restarted**
I/dalvikvm-heap(13497): Grow heap (frag case) to 12.995MB for 2400016-byte allocation
I/dalvikvm-heap(13497): Grow heap (frag case) to 13.002MB for 2400016-byte allocation
I/dalvikvm-heap(13497): Grow heap (frag case) to 13.002MB for 2400016-byte allocation
I/dalvikvm-heap(13497): Grow heap (frag case) to 13.002MB for 2400016-byte allocation

这就像关闭应用程序后保留的内存泄漏,在应用程序中我确实使用 sharedPreferences 来保存东西。但我看不出这如何在这里产生影响。有什么想法吗?

【问题讨论】:

  • 图片?调用回收?
  • @mike,是的,我试过了,做了一些堆转储。但是我真的不明白,你是什么意思调用回收?

标签: android memory-management heap-memory andengine


【解决方案1】:

Android 应用程序不会简单地关闭,请参阅这篇关于该主题的精彩博文: http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html

堆增长是因为您的应用程序没有关闭,它只是被隐藏了。尽管如此,您似乎确实有内存泄漏。当您更改变量名称时,堆会缩小,因为会生成新的 apk,手机上的应用程序会被终止并重新安装应用程序。

【讨论】:

  • 读得很好,尽管在“在不使用时杀死所有东西”的标题下,他并没有真正解释如何或者即使你可以通过编程方式做到这一点?有没有办法关闭活动?那是我想知道的,因为 activity.finish();是假的
  • 我确实检查了 onStop() 和 onDestroy() (我的应用程序同时调用了它们)并且根据developer.android.com/reference/android/app/Activity.html onDestroy() 似乎意味着活动应该在它之后死亡,但我的堆增长...
  • ...叹息...我想成为一名优秀的程序员,但我刚刚发现了最丑陋的一段代码,如果插入到我退出活动的地方,就可以解决我的问题。 android.os.Process.killProcess(android.os.Process.myPid());所以非常反对android的所有良好做法,但我不知道我是否可以抗拒使用它......
  • youtube.com/watch?v=_CruQY55HOk,好视频!认为我找到了泄漏的根源,即使活动的整个概念并没有完全结束令人困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多