我正在使用大約900x600的5個大圖像進行遊戲。當我退出遊戲(按後退鍵),然後嘗試啓動遊戲,我得到以下錯誤:重新啓動應用程序時出現內存不足錯誤(Android)
12-29 15:59:16.633: E/AndroidRuntime(18642): FATAL EXCEPTION: GLThread 17
12-29 15:59:16.633: E/AndroidRuntime(18642): java.lang.OutOfMemoryError: (Heap Size=20423KB, Allocated=3473KB, Bitmap Size=77KB)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.util.GLHelper.getPixelsARGB_8888(GLHelper.java:165)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.util.GLHelper.getPixels(GLHelper.java:41)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.util.GLState.glTexImage2D(GLState.java:641)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.texture.bitmap.BitmapTexture.writeTextureToHardware(BitmapTexture.java:120)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.texture.Texture.loadToHardware(Texture.java:137)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.texture.TextureManager.updateTextures(TextureManager.java:254)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.engine.Engine.onDrawFrame(Engine.java:621)
12-29 15:59:16.633: E/AndroidRuntime(18642): at org.andengine.opengl.view.EngineRenderer.onDrawFrame(EngineRenderer.java:105)
12-29 15:59:16.633: E/AndroidRuntime(18642): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363)
12-29 15:59:16.633: E/AndroidRuntime(18642): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
這實在是令人費解,因爲我卸下所有的紋理的應用程序被破壞之前。我知道這5個圖像導致錯誤,因爲當我跳過加載它們時,我沒有得到任何錯誤。爲了確保所有紋理都已卸載,我在裝入紋理後立即加載紋理。然後我退出並重新啓動遊戲,但收到了同樣的錯誤。紋理也沒有任何靜態引用。我還使用MAT來查看我在遊戲中使用了多少內存,並注意到我只使用了2.5MB,所以我不知道爲什麼錯誤是「堆大小= 20MB」。我已成功地解決了暫時的錯誤,唯一的辦法就是包括
system.exit(0);
我知道我不應該使用的,但我完全沒了主意。
編輯:我確保紋理被卸載。我在遊戲中有一個按鈕,可以卸載所有的紋理。當我按下它時,所有的紋理都變成黑色,我假設卸載了紋理。卸載紋理時使用的一般方法僅僅是說
someTexture.unload();
這是一個andEngine方法。我不確定除此之外會發生什麼。編輯2:我加載一個名爲onCreateResources()的方法中的紋理,我卸載它們onDestroy()。那些是我操縱紋理的兩個地方。
你確定紋理被釋放?你怎麼樣_裝載他們? –
您正在使用不同的線程來處理圖像,您是否在創建新線程之前明確銷燬了舊線程? – Sam
你使用Bitmap.recycle()嗎? :)另外,嘗試通過連續調用幾次來強制執行GC,或者使用cmdline參數增加堆大小-Xmx – Shark