【问题标题】:killing activity on Android doesn't clear memory?杀死Android上的活动不会清除内存?
【发布时间】:2011-04-30 16:26:04
【问题描述】:

我有一个在 android 上运行的游戏。

基本上,它的结构就像月球人

我开始了我的活动,使用布局开始运行课程。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <my.darling.gameView
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/>

</FrameLayout>

当我按下home键时,我每次都可以回到我的游戏中。我总是关闭线程并创建一个新线程。

当我按下 BACK 按钮时出现问题。

我想我的游戏已经结束了。但是在“点击游戏”4次后->“点击返回”

出现错误->“意外停止”

我已经重写了函数:onPause() 并调用了finish()。但它仍然会发生。

谁能帮帮我?

【问题讨论】:

  • 检查 LogCat 看看抛出了什么异常。这应该可以帮助您找到实际问题。
  • 说我的线程终止成功,但是我分配了太多的内存,所以系统出现错误。但是我不明白的是我按下了BACK按钮,所以应该终止活动并释放所有内存,不是吗?我没有覆盖任何方法!
  • 嗯,它说外部内存使用量太大...看来我问错了问题,非常抱歉。活动和线程都终止。但内存似乎没有释放。

标签: android memory android-activity bitmap


【解决方案1】:

我面临的问题是:

我在我的 UIthread 中分配了一些位图。如果您按下 BACK 按钮,系统不会释放内存。

即使 Activity 被销毁,它也不会归还 Bitmap 使用的内存。

所以当我尝试通过在 BACK 和我的游戏之间来回按下来测试我的游戏时,VM 由于缺少外部内存而关闭。

我从资源中解码的位图已经填满了我所有的记忆。

最简单的修复方法:

protected void onPause()
{
    super.onPause();
    System.gc();
}

由于android中存在清理Bitmap内存的bug。我们手动调用 GC 来强制它清理我们的位图。这是一个错误。

如果您想立即释放位图,请使用Bitmap.recycle()

http://mobi-solutions.blogspot.com/2010/08/how-to-if-you-want-to-create-and.html

http://code.google.com/p/android/issues/detail?id=8488

【讨论】:

  • 不知何故,当我按工具栏后退按钮返回主活动时,它会清理内存,而按后退按钮则不会。调用System.gc()确实解决了问题。
猜你喜欢
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2013-06-19
  • 2014-11-13
  • 1970-01-01
  • 2015-03-03
  • 2012-12-31
相关资源
最近更新 更多