2010-10-26 69 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