【问题标题】:In my Android app, every other time I launch my app, it crashes with OutOfMemory Exception在我的 Android 应用程序中,每次我启动我的应用程序时,它都会因 OutOfMemory 异常而崩溃
【发布时间】:2011-04-03 05:10:59
【问题描述】:

我有一个 Android 应用,它在 onCreate() 方法中预加载了很多图形。

当我在 HTC Aria 上测试我的应用程序并启动它时,它运行良好。但是,如果我按下后退按钮退出我的应用程序,然后再次启动应用程序,它会崩溃并出现 OutOfMemoryError:位图大小超出 VM 预算。如果我第三次启动该应用程序(在它崩溃之后)它启动正常。然后,如果我关闭并重新启动它,它会再次因内存不足而崩溃。如果我继续尝试,它会永远延续这种每隔一段时间就会崩溃的模式。

当我退出应用程序时,我检查了调用了哪些生命周期方法,并且 onStop() 和 onDestroy() 都被调用了,但我感觉某些东西还没有被清理干净,并且“崩溃”了“当我第二次尝试启动该应用程序时,它以某种方式释放了内存。

对可能发生的情况或如何解决此问题有任何想法吗?如果您需要我发布更多信息,请告诉我。谢谢!

信息:
我的应用相当简单,只有 1 个 Activity 可以播放一些帧动画。

【问题讨论】:

    标签: android memory crash


    【解决方案1】:

    您可能会在这个问题的许多答案中找到一些有用的信息: Strange out of memory issue while loading an image to a Bitmap object

    另外,我支持“避免内存泄漏”博客文章。特别是如果您可以通过方向更改触发相同的问题。在创建显示对象时使用“this”上下文是泄露 Activity 上下文的一种偷偷摸摸的方式。在我自己的应用程序中,我设法泄漏了整个上下文链,并且在进行方向更改时会很快耗尽内存。

    【讨论】:

      【解决方案2】:

      也许您不必要地持有上下文引用?查看Avoiding memory leaks 以获取一些提示,以及Attacking memory problems

      【讨论】:

      • 我将对此进行调查。到目前为止,我基本上已经取消了整个应用程序中的每个成员变量。而且我已将所有 Drawable 回调设置为 null,但我仍然遇到同样的问题。我将尝试使用 MAT,看看是否可以获得更多信息
      • 修复了!攻击内存问题链接是关于如何正确使用 MAT Analyzer 工具的优秀读物。原来我有一些意见,我不得不像这样将背景资源设置为 0:myView.setBackgroundResource(0);如果您没有明确地执行此操作,即使您将视图设置为 null,系统仍将保留该可绘制资源。
      • 我还想补充一点,如果您在代码中定义了任何布局,最好调用 myLayout.removeAllViews(),否则他们可以维护对他们不应该引用的东西的引用在您的应用关闭后。
      • @justinl,我面临着类似的问题。你能帮帮我吗?
      【解决方案3】:

      听起来 Activity 生命周期中的某些内容不太正确。你确定你已经涵盖了每一个开始吗? http://developer.android.com/reference/android/app/Activity.html

      你有onStop,但你有onDestroy吗?您可能缺少您需要的其中之一。

      【讨论】:

      • 感谢 Aidanc,我需要在 onDestroy 中放入什么来正确清理内存?现在我正在将一些图形加载到 AnimationDrawable 对象中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多