2010-10-26 67 views
3

我有一款游戏在android上运行。Android上的查杀活动没有清除内存?

基本上,它的结构是这样lunarlander

我开始我的活动,使用布局启动运行类。

<?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> 

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

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

我认为我的比赛完成了。但“点击游戏”之后的4倍 - >“点击BACK”

总会有一个错误 - >

“意外停止”我已经重写功能:onPause(),并呼吁finish()。但它仍然发生。

任何人都可以帮助我吗?

+1

检查logcat中看到的是什么抛出异常。这应该可以帮助你找到实际的问题。 – Juhani 2010-10-26 11:51:46

+0

它说我的线程终止成功,但我分配的内存太多,所以系统包含错误。但我不明白的是我按BACK按钮,所以活动应该终止,所有的内存应该被释放,不是吗?我没有覆盖任何方法! – 2010-10-28 02:38:20

+0

嗯,它说外部存储器的使用量太大了...似乎我问了一个错误的问题,所以很抱歉。活动和线程都终止。但内存似乎没有公布。 – 2010-10-28 03:07:42

回答

4

我现在面临的问题是:

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

即使该活动被破坏,它也不会返回由Bitmap使用的内存。

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

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

最简单的方法来解决它:

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

因为有清洗位图的内存在android系统的错误。我们手动调用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

+0

不知何故,当我按下工具栏的后退按钮返回到主要活动时,它将清理内存,而按后退按钮则不会。调用'System.gc()'的确解决了这个问题。 – 2015-10-10 23:11:31